Skip to content

Commit e4783b1

Browse files
committed
[INTERNAL] FioriElementsAnalyzer/SmartTemplateAnalyzer: Add tests for error cases
1 parent d9d3d2a commit e4783b1

File tree

2 files changed

+193
-0
lines changed

2 files changed

+193
-0
lines changed

test/lib/lbt/analyzer/FioriElementsAnalyzer.js

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,103 @@ test("_analyzeAST: get template name from ast", (t) => {
265265
t.is(templateName, "sap.fe.templates.Page.view.Page");
266266
});
267267

268+
test("_analyzeAST: get template name from ast (AMD define)", (t) => {
269+
const code = `define(["a", "sap/fe/core/TemplateAssembler"], function(a, TemplateAssembler){
270+
return TemplateAssembler.getTemplateComponent(getMethods,
271+
"sap.fe.templates.Page.Component", {
272+
metadata: {
273+
properties: {
274+
"templateName": {
275+
"type": "string",
276+
"defaultValue": "sap.fe.templates.Page.view.Page"
277+
}
278+
},
279+
"manifest": "json"
280+
}
281+
});});`;
282+
const ast = parseUtils.parseJS(code);
283+
const analyzer = new FioriElementsAnalyzer();
284+
const templateName = analyzer._analyzeAST("sap.fe.templates.Page.Component", ast);
285+
t.is(templateName, "sap.fe.templates.Page.view.Page");
286+
});
287+
288+
test("_analyzeAST: unable to get template name from ast (no TemplateAssembler import)", (t) => {
289+
const code = `sap.ui.define(["a"], // import missing
290+
function(a, TemplateAssembler){
291+
return TemplateAssembler.getTemplateComponent(getMethods,
292+
"sap.fe.templates.Page.Component", {
293+
metadata: {
294+
properties: {
295+
"templateName": {
296+
"type": "string",
297+
"defaultValue": "sap.fe.templates.Page.view.Page"
298+
}
299+
},
300+
"manifest": "json"
301+
}
302+
});});`;
303+
const ast = parseUtils.parseJS(code);
304+
const analyzer = new FioriElementsAnalyzer();
305+
const templateName = analyzer._analyzeAST("sap.fe.templates.Page.Component", ast);
306+
t.is(templateName, "");
307+
});
308+
309+
test("_analyzeAST: unable to get template name from ast (no module definition)", (t) => {
310+
const code = `myDefine(["a", "sap/fe/core/TemplateAssembler"], // unsupported module definition
311+
function(a, TemplateAssembler){
312+
return TemplateAssembler.getTemplateComponent(getMethods,
313+
"sap.fe.templates.Page.Component", {
314+
metadata: {
315+
properties: {
316+
"templateName": {
317+
"type": "string",
318+
"defaultValue": "sap.fe.templates.Page.view.Page"
319+
}
320+
},
321+
"manifest": "json"
322+
}
323+
});});`;
324+
const ast = parseUtils.parseJS(code);
325+
const analyzer = new FioriElementsAnalyzer();
326+
const templateName = analyzer._analyzeAST("sap.fe.templates.Page.Component", ast);
327+
t.is(templateName, "");
328+
});
329+
330+
test("_analyzeAST: unable to get template name from ast (ArrowFunction with implicit return #1)", (t) => {
331+
const code = `sap.ui.define(["a", "sap/fe/core/TemplateAssembler"],
332+
(a, TemplateAssembler) => TemplateAssembler.getTemplateComponent(getMethods,
333+
"sap.fe.templates.Page.Component", {
334+
metadata: {
335+
// No templateName provided
336+
"manifest": "json"
337+
}
338+
}));`;
339+
const ast = parseUtils.parseJS(code);
340+
const analyzer = new FioriElementsAnalyzer();
341+
const templateName = analyzer._analyzeAST("sap.fe.templates.Page.Component", ast);
342+
t.is(templateName, "");
343+
});
344+
345+
test("_analyzeAST: unable to get template name from ast (ArrowFunction with implicit return #2)", (t) => {
346+
const code = `sap.ui.define(["a", "sap/fe/core/TemplateAssembler"],
347+
(a, TemplateAssembler) => TemplateAssembler.extend(getMethods, // wrong call. should be 'getTemplateComponent'
348+
"sap.fe.templates.Page.Component", {
349+
metadata: {
350+
properties: {
351+
"templateName": {
352+
"type": "string",
353+
"defaultValue": "sap.fe.templates.Page.view.Page"
354+
}
355+
},
356+
"manifest": "json"
357+
}
358+
}));`;
359+
const ast = parseUtils.parseJS(code);
360+
const analyzer = new FioriElementsAnalyzer();
361+
const templateName = analyzer._analyzeAST("sap.fe.templates.Page.Component", ast);
362+
t.is(templateName, "");
363+
});
364+
268365
test.serial("_analyzeAST: get template name from ast (async function)", (t) => {
269366
const code = `sap.ui.define(["a", "sap/fe/core/TemplateAssembler"], async function(a, TemplateAssembler){
270367
return TemplateAssembler.getTemplateComponent(getMethods,

test/lib/lbt/analyzer/SmartTemplateAnalyzer.js

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,67 @@ test("_analyzeAST: get template name from ast", (t) => {
420420
t.is(result, "donkey");
421421
});
422422

423+
test("_analyzeAST: get template name from ast (AMD define)", (t) => {
424+
const code = `define(["a", "sap/suite/ui/generic/template/lib/TemplateAssembler"], function(a, TemplateAssembler) {
425+
return TemplateAssembler.getTemplateComponent(getMethods,
426+
"sap.fe.templates.Page.Component", {
427+
metadata: {
428+
properties: {
429+
"templateName": {
430+
"type": "string",
431+
"defaultValue": "sap.fe.templates.Page.view.Page"
432+
}
433+
},
434+
"manifest": "json"
435+
}
436+
});});`;
437+
const ast = parseUtils.parseJS(code);
438+
const analyzer = new SmartTemplateAnalyzer();
439+
const templateName = analyzer._analyzeAST("sap.fe.templates.Page.Component", ast);
440+
t.is(templateName, "sap.fe.templates.Page.view.Page");
441+
});
442+
443+
test("_analyzeAST: unable to get template name from ast (no TemplateAssembler import)", (t) => {
444+
const code = `define(["a"], function(a, TemplateAssembler) { // import missing
445+
return TemplateAssembler.getTemplateComponent(getMethods,
446+
"sap.fe.templates.Page.Component", {
447+
metadata: {
448+
properties: {
449+
"templateName": {
450+
"type": "string",
451+
"defaultValue": "sap.fe.templates.Page.view.Page"
452+
}
453+
},
454+
"manifest": "json"
455+
}
456+
});});`;
457+
const ast = parseUtils.parseJS(code);
458+
const analyzer = new SmartTemplateAnalyzer();
459+
const templateName = analyzer._analyzeAST("sap.fe.templates.Page.Component", ast);
460+
t.is(templateName, "");
461+
});
462+
463+
test("_analyzeAST: unable to get template name from ast (no module definition)", (t) => {
464+
const code = `myDefine(["a", "sap/suite/ui/generic/template/lib/TemplateAssembler"],
465+
function(a, TemplateAssembler) { // unsupported module definition
466+
return TemplateAssembler.getTemplateComponent(getMethods,
467+
"sap.fe.templates.Page.Component", {
468+
metadata: {
469+
properties: {
470+
"templateName": {
471+
"type": "string",
472+
"defaultValue": "sap.fe.templates.Page.view.Page"
473+
}
474+
},
475+
"manifest": "json"
476+
}
477+
});});`;
478+
const ast = parseUtils.parseJS(code);
479+
const analyzer = new SmartTemplateAnalyzer();
480+
const templateName = analyzer._analyzeAST("sap.fe.templates.Page.Component", ast);
481+
t.is(templateName, "");
482+
});
483+
423484
test("_analyzeAST: get template name from ast (ArrowFunction)", (t) => {
424485
const code = `sap.ui.define(["a", "sap/suite/ui/generic/template/lib/TemplateAssembler"],
425486
(a, TemplateAssembler) => {
@@ -495,6 +556,41 @@ test.serial("_analyzeAST: get template name from ast (async factory function)",
495556
t.is(warningLogSpy.callCount, 1, "Warning log is called once");
496557
});
497558

559+
test("_analyzeAST: unable to get template name from ast (ArrowFunction with implicit return #1)", (t) => {
560+
const code = `sap.ui.define(["a", "sap/suite/ui/generic/template/lib/TemplateAssembler"],
561+
(a, TemplateAssembler) => TemplateAssembler.getTemplateComponent(getMethods,
562+
"sap.fe.templates.Page.Component", {
563+
metadata: {
564+
// No templateName provided
565+
"manifest": "json"
566+
}
567+
}));`;
568+
const ast = parseUtils.parseJS(code);
569+
const analyzer = new SmartTemplateAnalyzer();
570+
const templateName = analyzer._analyzeAST("sap.fe.templates.Page.Component", ast);
571+
t.is(templateName, "");
572+
});
573+
574+
test("_analyzeAST: unable to get template name from ast (ArrowFunction with implicit return #2)", (t) => {
575+
const code = `sap.ui.define(["a", "sap/suite/ui/generic/template/lib/TemplateAssembler"],
576+
(a, TemplateAssembler) => TemplateAssembler.extend(getMethods, // wrong call. should be 'getTemplateComponent'
577+
"sap.fe.templates.Page.Component", {
578+
metadata: {
579+
properties: {
580+
"templateName": {
581+
"type": "string",
582+
"defaultValue": "sap.fe.templates.Page.view.Page"
583+
}
584+
},
585+
"manifest": "json"
586+
}
587+
}));`;
588+
const ast = parseUtils.parseJS(code);
589+
const analyzer = new SmartTemplateAnalyzer();
590+
const templateName = analyzer._analyzeAST("sap.fe.templates.Page.Component", ast);
591+
t.is(templateName, "");
592+
});
593+
498594
test.serial("_analyzeAST: get template name from ast (async arrow factory function)", (t) => {
499595
const code = `sap.ui.define(["a", "sap/suite/ui/generic/template/lib/TemplateAssembler"],
500596
async (a, TemplateAssembler) => {

0 commit comments

Comments
 (0)