@@ -684,3 +684,78 @@ jQuery.sap.registerPreloadedModules({
684684 t . deepEqual ( info . subModules , [ "foo/bar.js" ] ,
685685 "submodule from jQuery.sap.registerPreloadedModules" ) ;
686686} ) ;
687+
688+ test ( "Module that contains jQuery.sap.declare should be derived as subModule" , ( t ) => {
689+ const content = `
690+ sap.ui.define([], function() {
691+ jQuery.sap.declare("foo.bar");
692+ });
693+ ` ;
694+ const info = analyzeString ( content , "modules/module-with-jquery-sap-declare.js" ) ;
695+ t . is ( info . name , "modules/module-with-jquery-sap-declare.js" ) ;
696+ t . is ( info . rawModule , false ) ;
697+ t . is ( info . format , "ui5-declare" ) ; // FIXME: Format should actually be ui5-define
698+ t . is ( info . requiresTopLevelScope , false ) ;
699+ t . deepEqual ( info . subModules , [ "foo/bar.js" ] ,
700+ "jQuery.sap.declare subModule should be detected" ) ;
701+ t . deepEqual ( info . dependencies , [ "jquery.sap.global.js" ] , "Implicit dependency" ) ;
702+ } ) ;
703+
704+ test ( "Bundle that contains jQuery.sap.declare (sap.ui.predefine) should not be derived as module name" , ( t ) => {
705+ const content = `//@ui5-bundle test1/library-preload.js
706+ sap.ui.predefine("test1/module1", [], function() {
707+ jQuery.sap.declare("foo.bar");
708+ });
709+ ` ;
710+ const info = analyzeString ( content , "modules/bundle-with-jquery-sap-declare.js" ) ;
711+ t . is ( info . name , "test1/library-preload.js" , "Module name should be taken from @ui5-bundle comment" ) ;
712+ t . is ( info . rawModule , false ) ;
713+ t . is ( info . format , "ui5-declare" ) ; // FIXME: Format should actually be ui5-define
714+ t . is ( info . requiresTopLevelScope , false ) ;
715+ // Note: foo/bar.js is not listed as the predefine body is not analyzed
716+ t . deepEqual ( info . subModules , [ "test1/module1.js" ] ,
717+ "subModule via sap.ui.predefine should be detected" ) ;
718+ t . deepEqual ( info . dependencies , [ "jquery.sap.global.js" ] , "Implicit dependency" ) ;
719+ } ) ;
720+
721+ test ( "Bundle that contains jQuery.sap.declare (sap.ui.require.preload) should not be derived as module name" , ( t ) => {
722+ const content = `//@ui5-bundle test1/library-preload.js
723+ sap.ui.require.preload({
724+ "test1/module1.js": function() {
725+ sap.ui.define([], function() {
726+ jQuery.sap.declare("foo.bar");
727+ });
728+ }
729+ });
730+
731+ ` ;
732+ const info = analyzeString ( content , "modules/bundle-with-jquery-sap-declare.js" ) ;
733+ t . is ( info . name , "test1/library-preload.js" , "Module name should be taken from @ui5-bundle comment" ) ;
734+ t . is ( info . rawModule , false ) ;
735+ t . is ( info . format , "ui5-define" ) ;
736+ t . is ( info . requiresTopLevelScope , false ) ;
737+ // Note: foo/bar.js is not listed as the sap.ui.define body is not analyzed
738+ t . deepEqual ( info . subModules , [ "test1/module1.js" ] ,
739+ "subModule via sap.ui.predefine should be detected" ) ;
740+ t . deepEqual ( info . dependencies , [ "ui5loader-autoconfig.js" ] , "Implicit dependency" ) ;
741+ } ) ;
742+
743+ test ( "@ui5-bundle comment: Multiple comments" , ( t ) => {
744+ const content = `//@ui5-bundle test/bundle1.js
745+ //@ui5-bundle test/bundle2.js
746+ ` ;
747+ const info = analyzeString ( content , "modules/ui5-bundle-comments.js" ) ;
748+ t . is ( info . name , "test/bundle1.js" , "Comment from first line should be used" ) ;
749+ t . deepEqual ( info . subModules , [ ] ) ;
750+ t . deepEqual ( info . dependencies , [ ] ) ;
751+ } ) ;
752+
753+ test ( "@ui5-bundle comment: Multiple comments (Not in first line)" , ( t ) => {
754+ const content = `console.log('Foo');
755+ //@ui5-bundle test/bundle1.js
756+ //@ui5-bundle test/bundle2.js
757+ ` ;
758+ t . throws ( ( ) => analyzeString ( content , "modules/ui5-bundle-comments.js" ) , {
759+ message : "conflicting main modules found (unnamed + named)"
760+ } ) ;
761+ } ) ;
0 commit comments