@@ -93,4 +93,133 @@ void testCustomAccessor() {
9393 assertThat (moduleName ).isPresent ();
9494 assertThat (moduleName .get ()).isEqualTo ("ТестовыйМодуль" );
9595 }
96+
97+ @ Test
98+ void testDetectManagerModuleExpression () {
99+ // Проверяем, что null возвращает false
100+ assertThat (ModuleReference .isManagerModuleExpression (null )).isFalse ();
101+ }
102+
103+ @ Test
104+ void testExtractManagerModuleInfoCatalogs () {
105+ var code = "Процедура Тест()\n " +
106+ " Результат = Справочники.Номенклатура.НайтиПоКоду(\" 001\" );\n " +
107+ "КонецПроцедуры" ;
108+
109+ var documentContext = TestUtils .getDocumentContext (code );
110+ var ast = documentContext .getAst ();
111+
112+ var assignments = new ArrayList <BSLParser .AssignmentContext >();
113+ Trees .findAllRuleNodes (ast , BSLParser .RULE_assignment ).forEach (node ->
114+ assignments .add ((BSLParser .AssignmentContext ) node )
115+ );
116+
117+ assertThat (assignments ).hasSize (1 );
118+
119+ var expression = assignments .get (0 ).expression ();
120+ assertThat (ModuleReference .isManagerModuleExpression (expression )).isTrue ();
121+
122+ var managerInfo = ModuleReference .extractManagerModuleInfo (expression );
123+ assertThat (managerInfo ).isPresent ();
124+ assertThat (managerInfo .get ().managerType ()).isEqualTo ("Справочники" );
125+ assertThat (managerInfo .get ().objectName ()).isEqualTo ("Номенклатура" );
126+ }
127+
128+ @ Test
129+ void testExtractManagerModuleInfoDocuments () {
130+ var code = "Процедура Тест()\n " +
131+ " Результат = Документы.ПриходнаяНакладная.СоздатьДокумент();\n " +
132+ "КонецПроцедуры" ;
133+
134+ var documentContext = TestUtils .getDocumentContext (code );
135+ var ast = documentContext .getAst ();
136+
137+ var assignments = new ArrayList <BSLParser .AssignmentContext >();
138+ Trees .findAllRuleNodes (ast , BSLParser .RULE_assignment ).forEach (node ->
139+ assignments .add ((BSLParser .AssignmentContext ) node )
140+ );
141+
142+ assertThat (assignments ).hasSize (1 );
143+
144+ var expression = assignments .get (0 ).expression ();
145+ assertThat (ModuleReference .isManagerModuleExpression (expression )).isTrue ();
146+
147+ var managerInfo = ModuleReference .extractManagerModuleInfo (expression );
148+ assertThat (managerInfo ).isPresent ();
149+ assertThat (managerInfo .get ().managerType ()).isEqualTo ("Документы" );
150+ assertThat (managerInfo .get ().objectName ()).isEqualTo ("ПриходнаяНакладная" );
151+ }
152+
153+ @ Test
154+ void testExtractManagerModuleInfoEnglishSyntax () {
155+ var code = "Procedure Test()\n " +
156+ " Result = Catalogs.Nomenclature.FindByCode(\" 001\" );\n " +
157+ "EndProcedure" ;
158+
159+ var documentContext = TestUtils .getDocumentContext (code );
160+ var ast = documentContext .getAst ();
161+
162+ var assignments = new ArrayList <BSLParser .AssignmentContext >();
163+ Trees .findAllRuleNodes (ast , BSLParser .RULE_assignment ).forEach (node ->
164+ assignments .add ((BSLParser .AssignmentContext ) node )
165+ );
166+
167+ assertThat (assignments ).hasSize (1 );
168+
169+ var expression = assignments .get (0 ).expression ();
170+ assertThat (ModuleReference .isManagerModuleExpression (expression )).isTrue ();
171+
172+ var managerInfo = ModuleReference .extractManagerModuleInfo (expression );
173+ assertThat (managerInfo ).isPresent ();
174+ assertThat (managerInfo .get ().managerType ()).isEqualTo ("Catalogs" );
175+ assertThat (managerInfo .get ().objectName ()).isEqualTo ("Nomenclature" );
176+ }
177+
178+ @ Test
179+ void testExtractManagerModuleInfoInformationRegisters () {
180+ var code = "Процедура Тест()\n " +
181+ " Результат = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();\n " +
182+ "КонецПроцедуры" ;
183+
184+ var documentContext = TestUtils .getDocumentContext (code );
185+ var ast = documentContext .getAst ();
186+
187+ var assignments = new ArrayList <BSLParser .AssignmentContext >();
188+ Trees .findAllRuleNodes (ast , BSLParser .RULE_assignment ).forEach (node ->
189+ assignments .add ((BSLParser .AssignmentContext ) node )
190+ );
191+
192+ assertThat (assignments ).hasSize (1 );
193+
194+ var expression = assignments .get (0 ).expression ();
195+ assertThat (ModuleReference .isManagerModuleExpression (expression )).isTrue ();
196+
197+ var managerInfo = ModuleReference .extractManagerModuleInfo (expression );
198+ assertThat (managerInfo ).isPresent ();
199+ assertThat (managerInfo .get ().managerType ()).isEqualTo ("РегистрыСведений" );
200+ assertThat (managerInfo .get ().objectName ()).isEqualTo ("КурсыВалют" );
201+ }
202+
203+ @ Test
204+ void testNonManagerModuleExpression () {
205+ var code = "Процедура Тест()\n " +
206+ " Результат = МояПеременная.Метод();\n " +
207+ "КонецПроцедуры" ;
208+
209+ var documentContext = TestUtils .getDocumentContext (code );
210+ var ast = documentContext .getAst ();
211+
212+ var assignments = new ArrayList <BSLParser .AssignmentContext >();
213+ Trees .findAllRuleNodes (ast , BSLParser .RULE_assignment ).forEach (node ->
214+ assignments .add ((BSLParser .AssignmentContext ) node )
215+ );
216+
217+ assertThat (assignments ).hasSize (1 );
218+
219+ var expression = assignments .get (0 ).expression ();
220+ assertThat (ModuleReference .isManagerModuleExpression (expression )).isFalse ();
221+
222+ var managerInfo = ModuleReference .extractManagerModuleInfo (expression );
223+ assertThat (managerInfo ).isEmpty ();
224+ }
96225}
0 commit comments