aas-core-codegen 0.0.16__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (604) hide show
  1. aas_core_codegen/__init__.py +6 -0
  2. aas_core_codegen/__main__.py +8 -0
  3. aas_core_codegen/common.py +500 -0
  4. aas_core_codegen/cpp/__init__.py +1 -0
  5. aas_core_codegen/cpp/aas_common/__init__.py +6 -0
  6. aas_core_codegen/cpp/aas_common/_generate.py +713 -0
  7. aas_core_codegen/cpp/common.py +681 -0
  8. aas_core_codegen/cpp/constants/__init__.py +6 -0
  9. aas_core_codegen/cpp/constants/_generate.py +568 -0
  10. aas_core_codegen/cpp/description.py +654 -0
  11. aas_core_codegen/cpp/enhancing/__init__.py +4 -0
  12. aas_core_codegen/cpp/enhancing/_generate.py +993 -0
  13. aas_core_codegen/cpp/iteration/__init__.py +6 -0
  14. aas_core_codegen/cpp/iteration/_generate.py +2332 -0
  15. aas_core_codegen/cpp/jsonization/__init__.py +6 -0
  16. aas_core_codegen/cpp/jsonization/_generate.py +2619 -0
  17. aas_core_codegen/cpp/main.py +694 -0
  18. aas_core_codegen/cpp/naming.py +170 -0
  19. aas_core_codegen/cpp/optionaling.py +557 -0
  20. aas_core_codegen/cpp/pattern/__init__.py +6 -0
  21. aas_core_codegen/cpp/pattern/_generate.py +508 -0
  22. aas_core_codegen/cpp/revm/__init__.py +6 -0
  23. aas_core_codegen/cpp/revm/_generate.py +1149 -0
  24. aas_core_codegen/cpp/stringification/__init__.py +5 -0
  25. aas_core_codegen/cpp/stringification/_generate.py +955 -0
  26. aas_core_codegen/cpp/structure/__init__.py +7 -0
  27. aas_core_codegen/cpp/structure/_generate.py +1503 -0
  28. aas_core_codegen/cpp/transpilation.py +1383 -0
  29. aas_core_codegen/cpp/unrolling.py +159 -0
  30. aas_core_codegen/cpp/verification/__init__.py +6 -0
  31. aas_core_codegen/cpp/verification/_generate.py +3073 -0
  32. aas_core_codegen/cpp/visitation/__init__.py +6 -0
  33. aas_core_codegen/cpp/visitation/_generate.py +521 -0
  34. aas_core_codegen/cpp/wstringification/__init__.py +5 -0
  35. aas_core_codegen/cpp/wstringification/_generate.py +586 -0
  36. aas_core_codegen/cpp/xmlization/__init__.py +6 -0
  37. aas_core_codegen/cpp/xmlization/_generate.py +5373 -0
  38. aas_core_codegen/cpp/yielding.py +201 -0
  39. aas_core_codegen/csharp/__init__.py +1 -0
  40. aas_core_codegen/csharp/common.py +224 -0
  41. aas_core_codegen/csharp/constants/__init__.py +5 -0
  42. aas_core_codegen/csharp/constants/_generate.py +409 -0
  43. aas_core_codegen/csharp/copying/__init__.py +4 -0
  44. aas_core_codegen/csharp/copying/_generate.py +498 -0
  45. aas_core_codegen/csharp/description.py +1103 -0
  46. aas_core_codegen/csharp/enhancing/__init__.py +4 -0
  47. aas_core_codegen/csharp/enhancing/_generate.py +667 -0
  48. aas_core_codegen/csharp/jsonization/__init__.py +4 -0
  49. aas_core_codegen/csharp/jsonization/_generate.py +1630 -0
  50. aas_core_codegen/csharp/main.py +421 -0
  51. aas_core_codegen/csharp/naming.py +157 -0
  52. aas_core_codegen/csharp/reporting/__init__.py +4 -0
  53. aas_core_codegen/csharp/reporting/_generate.py +266 -0
  54. aas_core_codegen/csharp/stringification/__init__.py +4 -0
  55. aas_core_codegen/csharp/stringification/_generate.py +243 -0
  56. aas_core_codegen/csharp/structure/__init__.py +6 -0
  57. aas_core_codegen/csharp/structure/_generate.py +1341 -0
  58. aas_core_codegen/csharp/transpilation.py +990 -0
  59. aas_core_codegen/csharp/unrolling.py +211 -0
  60. aas_core_codegen/csharp/verification/__init__.py +6 -0
  61. aas_core_codegen/csharp/verification/_generate.py +1457 -0
  62. aas_core_codegen/csharp/visitation/__init__.py +5 -0
  63. aas_core_codegen/csharp/visitation/_generate.py +579 -0
  64. aas_core_codegen/csharp/xmlization/__init__.py +4 -0
  65. aas_core_codegen/csharp/xmlization/_generate.py +1980 -0
  66. aas_core_codegen/golang/__init__.py +1 -0
  67. aas_core_codegen/golang/aas_common/__init__.py +4 -0
  68. aas_core_codegen/golang/aas_common/_generate.py +152 -0
  69. aas_core_codegen/golang/common.py +303 -0
  70. aas_core_codegen/golang/constants/__init__.py +5 -0
  71. aas_core_codegen/golang/constants/_generate.py +339 -0
  72. aas_core_codegen/golang/description.py +501 -0
  73. aas_core_codegen/golang/enhancing/__init__.py +4 -0
  74. aas_core_codegen/golang/enhancing/_generate.py +527 -0
  75. aas_core_codegen/golang/jsonization/__init__.py +4 -0
  76. aas_core_codegen/golang/jsonization/_generate.py +1740 -0
  77. aas_core_codegen/golang/main.py +368 -0
  78. aas_core_codegen/golang/naming.py +412 -0
  79. aas_core_codegen/golang/pointering.py +631 -0
  80. aas_core_codegen/golang/reporting/__init__.py +4 -0
  81. aas_core_codegen/golang/reporting/_generate.py +218 -0
  82. aas_core_codegen/golang/stringification/__init__.py +4 -0
  83. aas_core_codegen/golang/stringification/_generate.py +394 -0
  84. aas_core_codegen/golang/structure/__init__.py +6 -0
  85. aas_core_codegen/golang/structure/_generate.py +1493 -0
  86. aas_core_codegen/golang/transpilation.py +1191 -0
  87. aas_core_codegen/golang/unrolling.py +159 -0
  88. aas_core_codegen/golang/verification/__init__.py +6 -0
  89. aas_core_codegen/golang/verification/_generate.py +1513 -0
  90. aas_core_codegen/golang/xmlization/__init__.py +4 -0
  91. aas_core_codegen/golang/xmlization/_generate.py +2507 -0
  92. aas_core_codegen/infer_for_schema/__init__.py +21 -0
  93. aas_core_codegen/infer_for_schema/_inline.py +693 -0
  94. aas_core_codegen/infer_for_schema/_len.py +527 -0
  95. aas_core_codegen/infer_for_schema/_pattern.py +311 -0
  96. aas_core_codegen/infer_for_schema/_set.py +394 -0
  97. aas_core_codegen/infer_for_schema/_stringify.py +201 -0
  98. aas_core_codegen/infer_for_schema/_types.py +135 -0
  99. aas_core_codegen/infer_for_schema/match.py +122 -0
  100. aas_core_codegen/intermediate/__init__.py +78 -0
  101. aas_core_codegen/intermediate/_hierarchy.py +397 -0
  102. aas_core_codegen/intermediate/_stringify.py +989 -0
  103. aas_core_codegen/intermediate/_translate.py +5128 -0
  104. aas_core_codegen/intermediate/_types.py +2901 -0
  105. aas_core_codegen/intermediate/construction.py +750 -0
  106. aas_core_codegen/intermediate/doc.py +344 -0
  107. aas_core_codegen/intermediate/pattern_verification.py +428 -0
  108. aas_core_codegen/intermediate/revm.py +985 -0
  109. aas_core_codegen/intermediate/type_inference.py +2266 -0
  110. aas_core_codegen/java/__init__.py +1 -0
  111. aas_core_codegen/java/common.py +197 -0
  112. aas_core_codegen/java/constants/__init__.py +5 -0
  113. aas_core_codegen/java/constants/_generate.py +334 -0
  114. aas_core_codegen/java/copying/__init__.py +4 -0
  115. aas_core_codegen/java/copying/_generate.py +502 -0
  116. aas_core_codegen/java/description.py +774 -0
  117. aas_core_codegen/java/enhancing/__init__.py +4 -0
  118. aas_core_codegen/java/enhancing/_generate.py +820 -0
  119. aas_core_codegen/java/generation/__init__.py +5 -0
  120. aas_core_codegen/java/generation/_generate.py +285 -0
  121. aas_core_codegen/java/jsonization/__init__.py +4 -0
  122. aas_core_codegen/java/jsonization/_generate.py +1472 -0
  123. aas_core_codegen/java/main.py +438 -0
  124. aas_core_codegen/java/naming.py +187 -0
  125. aas_core_codegen/java/optional.py +514 -0
  126. aas_core_codegen/java/reporting/__init__.py +4 -0
  127. aas_core_codegen/java/reporting/_generate.py +248 -0
  128. aas_core_codegen/java/stringification/__init__.py +4 -0
  129. aas_core_codegen/java/stringification/_generate.py +212 -0
  130. aas_core_codegen/java/structure/__init__.py +6 -0
  131. aas_core_codegen/java/structure/_generate.py +1767 -0
  132. aas_core_codegen/java/transpilation.py +1111 -0
  133. aas_core_codegen/java/verification/__init__.py +6 -0
  134. aas_core_codegen/java/verification/_generate.py +1536 -0
  135. aas_core_codegen/java/visitation/__init__.py +5 -0
  136. aas_core_codegen/java/visitation/_generate.py +689 -0
  137. aas_core_codegen/java/xmlization/__init__.py +4 -0
  138. aas_core_codegen/java/xmlization/_generate.py +2274 -0
  139. aas_core_codegen/jsonld/__init__.py +1 -0
  140. aas_core_codegen/jsonld/main.py +455 -0
  141. aas_core_codegen/jsonschema/__init__.py +1 -0
  142. aas_core_codegen/jsonschema/main.py +982 -0
  143. aas_core_codegen/main.py +245 -0
  144. aas_core_codegen/naming.py +133 -0
  145. aas_core_codegen/opcua/__init__.py +1 -0
  146. aas_core_codegen/opcua/main.py +1525 -0
  147. aas_core_codegen/opcua/naming.py +126 -0
  148. aas_core_codegen/parse/__init__.py +46 -0
  149. aas_core_codegen/parse/_rules.py +796 -0
  150. aas_core_codegen/parse/_stringify.py +532 -0
  151. aas_core_codegen/parse/_translate.py +3940 -0
  152. aas_core_codegen/parse/_types.py +973 -0
  153. aas_core_codegen/parse/retree/__init__.py +46 -0
  154. aas_core_codegen/parse/retree/_fix.py +434 -0
  155. aas_core_codegen/parse/retree/_parse.py +1143 -0
  156. aas_core_codegen/parse/retree/_render.py +298 -0
  157. aas_core_codegen/parse/retree/_stringify.py +199 -0
  158. aas_core_codegen/parse/retree/_types.py +362 -0
  159. aas_core_codegen/parse/retree/_visitor.py +70 -0
  160. aas_core_codegen/parse/tree.py +1303 -0
  161. aas_core_codegen/protobuf/__init__.py +1 -0
  162. aas_core_codegen/protobuf/common.py +225 -0
  163. aas_core_codegen/protobuf/description.py +1102 -0
  164. aas_core_codegen/protobuf/main.py +115 -0
  165. aas_core_codegen/protobuf/naming.py +143 -0
  166. aas_core_codegen/protobuf/structure/__init__.py +6 -0
  167. aas_core_codegen/protobuf/structure/_generate.py +502 -0
  168. aas_core_codegen/py.typed +1 -0
  169. aas_core_codegen/python/__init__.py +1 -0
  170. aas_core_codegen/python/aas_common/__init__.py +4 -0
  171. aas_core_codegen/python/aas_common/_generate.py +63 -0
  172. aas_core_codegen/python/common.py +406 -0
  173. aas_core_codegen/python/constants/__init__.py +5 -0
  174. aas_core_codegen/python/constants/_generate.py +377 -0
  175. aas_core_codegen/python/description.py +508 -0
  176. aas_core_codegen/python/jsonization/__init__.py +4 -0
  177. aas_core_codegen/python/jsonization/_generate.py +1391 -0
  178. aas_core_codegen/python/main.py +323 -0
  179. aas_core_codegen/python/naming.py +255 -0
  180. aas_core_codegen/python/stringification/__init__.py +4 -0
  181. aas_core_codegen/python/stringification/_generate.py +129 -0
  182. aas_core_codegen/python/structure/__init__.py +6 -0
  183. aas_core_codegen/python/structure/_generate.py +1801 -0
  184. aas_core_codegen/python/transpilation.py +958 -0
  185. aas_core_codegen/python/unrolling.py +156 -0
  186. aas_core_codegen/python/verification/__init__.py +6 -0
  187. aas_core_codegen/python/verification/_generate.py +1471 -0
  188. aas_core_codegen/python/xmlization/__init__.py +4 -0
  189. aas_core_codegen/python/xmlization/_generate.py +3003 -0
  190. aas_core_codegen/python_protobuf/__init__.py +1 -0
  191. aas_core_codegen/python_protobuf/main.py +1424 -0
  192. aas_core_codegen/python_protobuf/naming.py +85 -0
  193. aas_core_codegen/rdf_shacl/__init__.py +1 -0
  194. aas_core_codegen/rdf_shacl/_description.py +351 -0
  195. aas_core_codegen/rdf_shacl/common.py +206 -0
  196. aas_core_codegen/rdf_shacl/main.py +114 -0
  197. aas_core_codegen/rdf_shacl/naming.py +145 -0
  198. aas_core_codegen/rdf_shacl/rdf.py +435 -0
  199. aas_core_codegen/rdf_shacl/shacl.py +453 -0
  200. aas_core_codegen/run.py +124 -0
  201. aas_core_codegen/smoke/__init__.py +1 -0
  202. aas_core_codegen/smoke/main.py +219 -0
  203. aas_core_codegen/specific_implementations.py +72 -0
  204. aas_core_codegen/stringify.py +333 -0
  205. aas_core_codegen/typescript/__init__.py +1 -0
  206. aas_core_codegen/typescript/aas_common/__init__.py +4 -0
  207. aas_core_codegen/typescript/aas_common/_generate.py +472 -0
  208. aas_core_codegen/typescript/common.py +340 -0
  209. aas_core_codegen/typescript/constants/__init__.py +5 -0
  210. aas_core_codegen/typescript/constants/_generate.py +347 -0
  211. aas_core_codegen/typescript/description.py +530 -0
  212. aas_core_codegen/typescript/jsonization/__init__.py +4 -0
  213. aas_core_codegen/typescript/jsonization/_generate.py +1510 -0
  214. aas_core_codegen/typescript/main.py +258 -0
  215. aas_core_codegen/typescript/naming.py +189 -0
  216. aas_core_codegen/typescript/stringification/__init__.py +4 -0
  217. aas_core_codegen/typescript/stringification/_generate.py +367 -0
  218. aas_core_codegen/typescript/structure/__init__.py +6 -0
  219. aas_core_codegen/typescript/structure/_generate.py +2500 -0
  220. aas_core_codegen/typescript/transpilation.py +1051 -0
  221. aas_core_codegen/typescript/unrolling.py +159 -0
  222. aas_core_codegen/typescript/verification/__init__.py +6 -0
  223. aas_core_codegen/typescript/verification/_generate.py +1578 -0
  224. aas_core_codegen/xsd/__init__.py +1 -0
  225. aas_core_codegen/xsd/main.py +1187 -0
  226. aas_core_codegen/xsd/naming.py +83 -0
  227. aas_core_codegen/yielding/__init__.py +1 -0
  228. aas_core_codegen/yielding/flow.py +139 -0
  229. aas_core_codegen/yielding/linear.py +754 -0
  230. aas_core_codegen-0.0.16.dist-info/METADATA +211 -0
  231. aas_core_codegen-0.0.16.dist-info/RECORD +604 -0
  232. aas_core_codegen-0.0.16.dist-info/WHEEL +5 -0
  233. aas_core_codegen-0.0.16.dist-info/entry_points.txt +3 -0
  234. aas_core_codegen-0.0.16.dist-info/licenses/AUTHORS +9 -0
  235. aas_core_codegen-0.0.16.dist-info/licenses/LICENSE +23 -0
  236. aas_core_codegen-0.0.16.dist-info/top_level.txt +2 -0
  237. dev/continuous_integration/__init__.py +1 -0
  238. dev/continuous_integration/check_help_in_readme.py +208 -0
  239. dev/continuous_integration/check_init_and_pyproject_consistent.py +154 -0
  240. dev/continuous_integration/precommit.py +400 -0
  241. dev/dev_scripts/__init__.py +1 -0
  242. dev/dev_scripts/compare_rendered_regexes_against_source_py.py +42 -0
  243. dev/dev_scripts/copy_to_aas_core3_cpp.py +100 -0
  244. dev/dev_scripts/copy_to_aas_core3_java.py +90 -0
  245. dev/dev_scripts/download_latest_aas_core_meta_v3.py +114 -0
  246. dev/dev_scripts/draw_bipartite_graph_based_on_lines.py +37 -0
  247. dev/dev_scripts/run_tests_with_rerecord.py +69 -0
  248. dev/dev_scripts/update_to_aas_core_meta.py +174 -0
  249. dev/integration_tests/input/jsonschema/boilerplate/main.py +55 -0
  250. dev/integration_tests/input/meta_model.py +38 -0
  251. dev/integration_tests/input/python/boilerplate/main.py +153 -0
  252. dev/integration_tests/main.py +258 -0
  253. dev/test_data/csharp/test_structure/concrete_class_with_descendants/meta_model.py +15 -0
  254. dev/test_data/csharp/test_structure/constructor_without_arguments/all_properties_optional/meta_model.py +9 -0
  255. dev/test_data/csharp/test_structure/constructor_without_arguments/no_properties/meta_model.py +6 -0
  256. dev/test_data/csharp/test_verification/builtin_functions/len/on_list/meta_model.py +20 -0
  257. dev/test_data/csharp/test_verification/builtin_functions/len/on_str/meta_model.py +16 -0
  258. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/as_prefix/meta_model.py +8 -0
  259. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/as_suffix/meta_model.py +8 -0
  260. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/in_group_with_quantifier/meta_model.py +8 -0
  261. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/in_the_middle/meta_model.py +8 -0
  262. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/in_union/meta_model.py +8 -0
  263. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/single_utf32_literal/meta_model.py +8 -0
  264. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/with_quantifier_within_group/meta_model.py +8 -0
  265. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/with_quantifier_without_group/meta_model.py +8 -0
  266. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/at_the_beginning/meta_model.py +8 -0
  267. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/at_the_end/meta_model.py +8 -0
  268. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/in_the_middle/meta_model.py +8 -0
  269. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/multiple/meta_model.py +8 -0
  270. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/single/meta_model.py +8 -0
  271. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/single_with_quantifier/meta_model.py +8 -0
  272. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/mixed_with_non_utf32/meta_model.py +8 -0
  273. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/more_than_two_high_surrogates/meta_model.py +8 -0
  274. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/multiple_utf32_ranges/meta_model.py +8 -0
  275. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/multiple_utf32_ranges_mixed_with_non_utf32/meta_model.py +8 -0
  276. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/same_high_surrogate/meta_model.py +8 -0
  277. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/same_high_surrogate_with_quantifier/meta_model.py +8 -0
  278. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/two_high_surrogates/meta_model.py +8 -0
  279. dev/test_data/intermediate/expected/class/empty/meta_model.py +6 -0
  280. dev/test_data/intermediate/expected/class/implementation_specific_method/meta_model.py +8 -0
  281. dev/test_data/intermediate/expected/class/inheritance/meta_model.py +41 -0
  282. dev/test_data/intermediate/expected/class/methods_with_contracts/meta_model.py +15 -0
  283. dev/test_data/intermediate/expected/class/only_method_no_property/meta_model.py +7 -0
  284. dev/test_data/intermediate/expected/class/only_property_no_method/meta_model.py +9 -0
  285. dev/test_data/intermediate/expected/constant/constant_set/of_enum/meta_model.py +12 -0
  286. dev/test_data/intermediate/expected/constant/constant_set/of_str/meta_model.py +4 -0
  287. dev/test_data/intermediate/expected/constant/constant_set/with_description/meta_model.py +6 -0
  288. dev/test_data/intermediate/expected/constant/constant_set/with_superset_of/meta_model.py +14 -0
  289. dev/test_data/intermediate/expected/constant/constant_str/only_value/meta_model.py +7 -0
  290. dev/test_data/intermediate/expected/constant/constant_str/with_description/meta_model.py +5 -0
  291. dev/test_data/intermediate/expected/documentation/docstring_with_special_characters_in_literal/meta_model.py +20 -0
  292. dev/test_data/intermediate/expected/documentation/docstring_with_special_characters_outside_literal/meta_model.py +20 -0
  293. dev/test_data/intermediate/expected/empty/meta_model.py +2 -0
  294. dev/test_data/intermediate/expected/enumeration/meta_model.py +9 -0
  295. dev/test_data/intermediate/expected/interface/basic/meta_model.py +14 -0
  296. dev/test_data/intermediate/expected/interface/empty/meta_model.py +7 -0
  297. dev/test_data/intermediate/expected/interface/inheritance/meta_model.py +27 -0
  298. dev/test_data/intermediate/expected/interface/method_signature/meta_model.py +10 -0
  299. dev/test_data/intermediate/expected/interface/only_constructor/meta_model.py +11 -0
  300. dev/test_data/intermediate/expected/method/non_mutating/implementation_specific/meta_model.py +12 -0
  301. dev/test_data/intermediate/expected/method/non_mutating/understood/meta_model.py +11 -0
  302. dev/test_data/intermediate/expected/type_annotation/atomic/meta_model.py +9 -0
  303. dev/test_data/intermediate/expected/type_annotation/subscripted/class/meta_model.py +13 -0
  304. dev/test_data/intermediate/expected/type_annotation/subscripted/primitive/meta_model.py +9 -0
  305. dev/test_data/intermediate/unexpected/constant_set/of_enum/enumeration_literals_in_subset_outside_of_superset/meta_model.py +20 -0
  306. dev/test_data/intermediate/unexpected/constant_set/of_enum/invalid_literal/meta_model.py +11 -0
  307. dev/test_data/intermediate/unexpected/constant_set/of_enum/mismatch_between_enumeration_and_literal/meta_model.py +30 -0
  308. dev/test_data/intermediate/unexpected/constant_set/of_enum/mismatch_in_enumerations_between_subset_and_superset/meta_model.py +21 -0
  309. dev/test_data/intermediate/unexpected/constant_set/of_str/literals_in_subset_outside_of_superset/meta_model.py +18 -0
  310. dev/test_data/intermediate/unexpected/constant_set/of_str/mismatch_between_type_annotation_and_literals/meta_model.py +10 -0
  311. dev/test_data/intermediate/unexpected/constant_set/of_str/superset_and_subset_mismatch_in_type/meta_model.py +12 -0
  312. dev/test_data/intermediate/unexpected/constraints/dangling_constraintref/meta_model.py +18 -0
  313. dev/test_data/intermediate/unexpected/constraints/duplicate_constraints/meta_model.py +20 -0
  314. dev/test_data/intermediate/unexpected/documentation/unexpected_documentation_elements/meta_model.py +34 -0
  315. dev/test_data/intermediate/unexpected/invariant/class_invariant_uses_re/meta_model.py +10 -0
  316. dev/test_data/intermediate/unexpected/invariant/invariant_of_constrained_primitive_uses_re/meta_model.py +7 -0
  317. dev/test_data/intermediate/unexpected/invariant/unexpected_argument_count_to_len/meta_model.py +20 -0
  318. dev/test_data/intermediate/unexpected/invariant/unhandled_built_in_function/meta_model.py +16 -0
  319. dev/test_data/intermediate/unexpected/method_definitions/non_constant_default/meta_model.py +7 -0
  320. dev/test_data/intermediate/unexpected/optional_constructor_arguments_wo_default/default_non_none/meta_model.py +16 -0
  321. dev/test_data/intermediate/unexpected/optional_constructor_arguments_wo_default/no_default/meta_model.py +16 -0
  322. dev/test_data/intermediate/unexpected/properties_and_constructor_arguments_do_not_match/after_inheritance/meta_model.py +58 -0
  323. dev/test_data/intermediate/unexpected/properties_and_constructor_arguments_do_not_match/type_missmatch/meta_model.py +9 -0
  324. dev/test_data/intermediate/unexpected/properties_and_constructor_arguments_do_not_match/within_class/meta_model.py +22 -0
  325. dev/test_data/jsonschema/test_main/regression_when_len_constraints_on_inherited_property/meta_model.py +28 -0
  326. dev/test_data/opcua/test_main/abstract_and_concrete_classes/meta_model.py +37 -0
  327. dev/test_data/opcua/test_main/classes_with_invariants/meta_model.py +21 -0
  328. dev/test_data/opcua/test_main/concrete_class_with_descendant/meta_model.py +27 -0
  329. dev/test_data/opcua/test_main/concrete_class_with_enum/meta_model.py +21 -0
  330. dev/test_data/opcua/test_main/concrete_class_with_list_of_instances/meta_model.py +21 -0
  331. dev/test_data/opcua/test_main/concrete_class_with_primitive_attributes/meta_model.py +41 -0
  332. dev/test_data/opcua/test_main/concrete_class_with_string/meta_model.py +13 -0
  333. dev/test_data/opcua/test_main/constrained_primitive/meta_model.py +20 -0
  334. dev/test_data/opcua/test_main/multiple_inheritance/meta_model.py +25 -0
  335. dev/test_data/parse/expected/constant/constant_set/of_enum/meta_model.py +12 -0
  336. dev/test_data/parse/expected/constant/constant_set/of_str/meta_model.py +4 -0
  337. dev/test_data/parse/expected/constant/constant_set/with_description/meta_model.py +6 -0
  338. dev/test_data/parse/expected/constant/constant_set/with_superset_of/meta_model.py +14 -0
  339. dev/test_data/parse/expected/constant/constant_str/only_value/meta_model.py +7 -0
  340. dev/test_data/parse/expected/constant/constant_str/with_description/meta_model.py +5 -0
  341. dev/test_data/parse/expected/enum/ok/meta_model.py +15 -0
  342. dev/test_data/parse/expected/implementation_specific_class/properties_and_methods_in_implementation_specific_class/meta_model.py +17 -0
  343. dev/test_data/parse/expected/inheritance/basic/meta_model.py +11 -0
  344. dev/test_data/parse/expected/inheritance/diamond/meta_model.py +26 -0
  345. dev/test_data/parse/expected/inheritance/inheritance_from_concrete_class/meta_model.py +10 -0
  346. dev/test_data/parse/expected/invariants/in_relation/meta_model.py +16 -0
  347. dev/test_data/parse/expected/method/arguments/meta_model.py +7 -0
  348. dev/test_data/parse/expected/method/basic/meta_model.py +7 -0
  349. dev/test_data/parse/expected/method/contracts/condition_as_keyword_argument/meta_model.py +8 -0
  350. dev/test_data/parse/expected/method/contracts/condition_as_positional_argument/meta_model.py +8 -0
  351. dev/test_data/parse/expected/method/contracts/description_as_keyword_argument/meta_model.py +8 -0
  352. dev/test_data/parse/expected/method/contracts/description_as_positional_argument/meta_model.py +8 -0
  353. dev/test_data/parse/expected/method/contracts/multiple_contracts_in_order/meta_model.py +17 -0
  354. dev/test_data/parse/expected/method/contracts/postcondition/basic/meta_model.py +10 -0
  355. dev/test_data/parse/expected/method/contracts/postcondition/snapshot/with_keyword_arguments/meta_model.py +9 -0
  356. dev/test_data/parse/expected/method/contracts/postcondition/snapshot/with_positional_arguments/meta_model.py +9 -0
  357. dev/test_data/parse/expected/method/default/meta_model.py +9 -0
  358. dev/test_data/parse/expected/method/description/meta_model.py +8 -0
  359. dev/test_data/parse/expected/method/is_implementation_specific/meta_model.py +8 -0
  360. dev/test_data/parse/expected/method/non_mutating/meta_model.py +11 -0
  361. dev/test_data/parse/expected/method/returns_none/meta_model.py +7 -0
  362. dev/test_data/parse/expected/method/returns_something/meta_model.py +7 -0
  363. dev/test_data/parse/expected/single_class/description/meta_model.py +12 -0
  364. dev/test_data/parse/expected/single_class/empty/meta_model.py +6 -0
  365. dev/test_data/parse/expected/single_class/property/description/meta_model.py +14 -0
  366. dev/test_data/parse/expected/single_class/property/mandatory/meta_model.py +6 -0
  367. dev/test_data/parse/expected/single_class/property/optional/meta_model.py +6 -0
  368. dev/test_data/parse/expected/single_class/property/recursion_to_entity/meta_model.py +6 -0
  369. dev/test_data/parse/unexpected/class_decorators/non_name_decorator/meta_model.py +7 -0
  370. dev/test_data/parse/unexpected/class_decorators/unknown_decorator/meta_model.py +7 -0
  371. dev/test_data/parse/unexpected/class_definitions/is_abstract_and_implementation_specific/meta_model.py +8 -0
  372. dev/test_data/parse/unexpected/class_definitions/unexpected_docstring_before_a_method/meta_model.py +11 -0
  373. dev/test_data/parse/unexpected/class_definitions/unexpected_docstring_for_a_pass/meta_model.py +9 -0
  374. dev/test_data/parse/unexpected/class_definitions/unexpected_double_description_for_a_property/meta_model.py +10 -0
  375. dev/test_data/parse/unexpected/class_inheritances/inheriting_from_implementation_specific_parent/meta_model.py +20 -0
  376. dev/test_data/parse/unexpected/class_inheritances/non_name_super_class/meta_model.py +6 -0
  377. dev/test_data/parse/unexpected/enum/expression_as_assignment_value/meta_model.py +6 -0
  378. dev/test_data/parse/unexpected/enum/non_assignment/meta_model.py +8 -0
  379. dev/test_data/parse/unexpected/enum/non_string_literal/meta_model.py +6 -0
  380. dev/test_data/parse/unexpected/enum/unexpected_inheritance/meta_model.py +6 -0
  381. dev/test_data/parse/unexpected/method_contracts/contract/non_lambda_condition/meta_model.py +8 -0
  382. dev/test_data/parse/unexpected/method_contracts/contract/non_string_literal_description/meta_model.py +8 -0
  383. dev/test_data/parse/unexpected/method_contracts/contract/without_any_arguments/meta_model.py +8 -0
  384. dev/test_data/parse/unexpected/method_contracts/contract/without_condition/meta_model.py +8 -0
  385. dev/test_data/parse/unexpected/method_contracts/postcondition/OLD_in_postcondition_without_snapshot/meta_model.py +8 -0
  386. dev/test_data/parse/unexpected/method_contracts/postcondition/argument_missing_in_function/meta_model.py +8 -0
  387. dev/test_data/parse/unexpected/method_contracts/precondition/argument_missing_in_function/meta_model.py +8 -0
  388. dev/test_data/parse/unexpected/method_contracts/snapshot/argument_missing_in_function/meta_model.py +8 -0
  389. dev/test_data/parse/unexpected/method_contracts/snapshot/capture_not_a_lambda/meta_model.py +8 -0
  390. dev/test_data/parse/unexpected/method_contracts/snapshot/invalid_name/meta_model.py +8 -0
  391. dev/test_data/parse/unexpected/method_contracts/snapshot/name_not_a_string_literal/meta_model.py +8 -0
  392. dev/test_data/parse/unexpected/method_contracts/snapshot/without_a_capture/meta_model.py +8 -0
  393. dev/test_data/parse/unexpected/method_contracts/snapshot/without_a_name/meta_model.py +8 -0
  394. dev/test_data/parse/unexpected/method_decorators/non_mutating/non_mutating_constructor/meta_model.py +8 -0
  395. dev/test_data/parse/unexpected/method_decorators/non_mutating/non_mutating_verification_function/meta_model.py +8 -0
  396. dev/test_data/parse/unexpected/method_decorators/non_name_decorator/meta_model.py +8 -0
  397. dev/test_data/parse/unexpected/method_decorators/unknown_call_decorator/meta_model.py +8 -0
  398. dev/test_data/parse/unexpected/method_decorators/unknown_name_decorator/meta_model.py +8 -0
  399. dev/test_data/parse/unexpected/method_definitions/argument_with_final/meta_model.py +7 -0
  400. dev/test_data/parse/unexpected/method_definitions/argument_without_a_type_annotation/meta_model.py +7 -0
  401. dev/test_data/parse/unexpected/method_definitions/default_for_self/meta_model.py +7 -0
  402. dev/test_data/parse/unexpected/method_definitions/dunder/meta_model.py +7 -0
  403. dev/test_data/parse/unexpected/method_definitions/init_with_return_type/meta_model.py +7 -0
  404. dev/test_data/parse/unexpected/method_definitions/with_keyword_only_arguments/meta_model.py +7 -0
  405. dev/test_data/parse/unexpected/method_definitions/with_positional_arguments/meta_model.py +7 -0
  406. dev/test_data/parse/unexpected/method_definitions/with_type_annotation_for_self/meta_model.py +7 -0
  407. dev/test_data/parse/unexpected/method_definitions/with_variable_arguments/meta_model.py +7 -0
  408. dev/test_data/parse/unexpected/method_definitions/with_variable_keyword_arguments/meta_model.py +7 -0
  409. dev/test_data/parse/unexpected/method_definitions/without_arguments/meta_model.py +7 -0
  410. dev/test_data/parse/unexpected/method_definitions/without_self/meta_model.py +7 -0
  411. dev/test_data/parse/unexpected/method_definitions/without_type_annotation_for_result/meta_model.py +7 -0
  412. dev/test_data/parse/unexpected/property_definitions/final_without_subscript/meta_model.py +6 -0
  413. dev/test_data/parse/unexpected/property_definitions/nested_final/meta_model.py +6 -0
  414. dev/test_data/parse/unexpected/property_definitions/non_simple/meta_model.py +6 -0
  415. dev/test_data/parse/unexpected/property_definitions/unexpected_assignment/meta_model.py +6 -0
  416. dev/test_data/parse/unexpected/property_definitions/unexpected_non_name_property/meta_model.py +6 -0
  417. dev/test_data/parse/unexpected/property_definitions/without_type_annotation/meta_model.py +6 -0
  418. dev/test_data/parse/unexpected/symbol_table/constant_set_with_a_non_set_subset/meta_model.py +6 -0
  419. dev/test_data/parse/unexpected/symbol_table/dangling_inheritance/meta_model.py +6 -0
  420. dev/test_data/parse/unexpected/symbol_table/dangling_reference_in_type_annotation_of_a_property/meta_model.py +6 -0
  421. dev/test_data/parse/unexpected/symbol_table/dangling_reference_in_type_annotation_of_an_argument/meta_model.py +7 -0
  422. dev/test_data/parse/unexpected/symbol_table/dangling_reference_in_type_annotation_of_constant_set/meta_model.py +6 -0
  423. dev/test_data/parse/unexpected/symbol_table/dangling_subset_in_constant_set/meta_model.py +4 -0
  424. dev/test_data/parse/unexpected/symbol_table/inheritance_from_non_class/meta_model.py +10 -0
  425. dev/test_data/parse_retree/expected/character_set/common_escaping/source.py +1 -0
  426. dev/test_data/parse_retree/expected/character_set/complementing/double_caret/source.py +1 -0
  427. dev/test_data/parse_retree/expected/character_set/complementing/multiple_ranges/source.py +1 -0
  428. dev/test_data/parse_retree/expected/character_set/complementing/suffix_dash/source.py +1 -0
  429. dev/test_data/parse_retree/expected/character_set/escape_first_caret/source.py +1 -0
  430. dev/test_data/parse_retree/expected/character_set/literals_which_need_no_escaping_in_characters_set_but_need_escaping_outside/source.py +1 -0
  431. dev/test_data/parse_retree/expected/character_set/multiple_ranges/source.py +1 -0
  432. dev/test_data/parse_retree/expected/character_set/single_literal/source.py +1 -0
  433. dev/test_data/parse_retree/expected/character_set/single_range/source.py +1 -0
  434. dev/test_data/parse_retree/expected/character_set/unescaped_dash/only_dash/source.py +1 -0
  435. dev/test_data/parse_retree/expected/character_set/unescaped_dash/prefix_dash/source.py +1 -0
  436. dev/test_data/parse_retree/expected/character_set/unescaped_dash/suffix_dash/source.py +1 -0
  437. dev/test_data/parse_retree/expected/dot/source.py +1 -0
  438. dev/test_data/parse_retree/expected/empty/group/source.py +1 -0
  439. dev/test_data/parse_retree/expected/empty/group_in_a_group/source.py +1 -0
  440. dev/test_data/parse_retree/expected/empty/group_of_union_of_empty_concatenations/source.py +1 -0
  441. dev/test_data/parse_retree/expected/empty/regex/source.py +1 -0
  442. dev/test_data/parse_retree/expected/empty/union_of_empty_concatenations/source.py +1 -0
  443. dev/test_data/parse_retree/expected/escaped_literals/source.py +1 -0
  444. dev/test_data/parse_retree/expected/formatted_value/at_the_beginning/source.py +1 -0
  445. dev/test_data/parse_retree/expected/formatted_value/at_the_end/source.py +1 -0
  446. dev/test_data/parse_retree/expected/formatted_value/in_the_middle/source.py +1 -0
  447. dev/test_data/parse_retree/expected/formatted_value/single_formatted_value/source.py +1 -0
  448. dev/test_data/parse_retree/expected/literal/source.py +1 -0
  449. dev/test_data/parse_retree/expected/quantifier/greedy/at_least_3/source.py +1 -0
  450. dev/test_data/parse_retree/expected/quantifier/greedy/at_least_one/source.py +1 -0
  451. dev/test_data/parse_retree/expected/quantifier/greedy/at_most_3/source.py +1 -0
  452. dev/test_data/parse_retree/expected/quantifier/greedy/exactly_3/source.py +1 -0
  453. dev/test_data/parse_retree/expected/quantifier/greedy/maybe/source.py +1 -0
  454. dev/test_data/parse_retree/expected/quantifier/greedy/zero_or_more/source.py +1 -0
  455. dev/test_data/parse_retree/expected/quantifier/non_greedy/at_least_3/source.py +1 -0
  456. dev/test_data/parse_retree/expected/quantifier/non_greedy/at_least_one/source.py +1 -0
  457. dev/test_data/parse_retree/expected/quantifier/non_greedy/at_most_3/source.py +1 -0
  458. dev/test_data/parse_retree/expected/quantifier/non_greedy/exactly_3/source.py +1 -0
  459. dev/test_data/parse_retree/expected/quantifier/non_greedy/maybe/source.py +1 -0
  460. dev/test_data/parse_retree/expected/quantifier/non_greedy/zero_or_more/source.py +1 -0
  461. dev/test_data/parse_retree/expected/quantifier/on_a_character_set/source.py +1 -0
  462. dev/test_data/parse_retree/expected/quantifier/on_a_formatted_value/source.py +1 -0
  463. dev/test_data/parse_retree/expected/quantifier/on_a_group/source.py +1 -0
  464. dev/test_data/parse_retree/expected/quantifier/on_a_literal/source.py +1 -0
  465. dev/test_data/parse_retree/expected/start_and_stop_symbols/double_end_symbol/source.py +1 -0
  466. dev/test_data/parse_retree/expected/start_and_stop_symbols/double_start_symbol/source.py +1 -0
  467. dev/test_data/parse_retree/expected/start_and_stop_symbols/end_symbol_in_the_middle/source.py +1 -0
  468. dev/test_data/parse_retree/expected/start_and_stop_symbols/only_start_symbol/source.py +1 -0
  469. dev/test_data/parse_retree/expected/start_and_stop_symbols/only_stop_symbol/source.py +1 -0
  470. dev/test_data/parse_retree/expected/start_and_stop_symbols/start_symbol_at_the_beginning/source.py +1 -0
  471. dev/test_data/parse_retree/expected/start_and_stop_symbols/start_symbol_in_the_middle/source.py +1 -0
  472. dev/test_data/parse_retree/expected/start_and_stop_symbols/stop_symbol_at_the_end/source.py +1 -0
  473. dev/test_data/parse_retree/expected/union/of_character_sets/source.py +1 -0
  474. dev/test_data/parse_retree/expected/union/of_groups/source.py +1 -0
  475. dev/test_data/parse_retree/expected/union/of_string_literals/source.py +1 -0
  476. dev/test_data/parse_retree/expected/union/within_group/source.py +1 -0
  477. dev/test_data/parse_retree/expected/whitespace/source.py +1 -0
  478. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/Uxxxxxxxx_out_of_range/source.py +1 -0
  479. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/only_backslash/source.py +1 -0
  480. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/short_Uxxxxxxxx/source.py +1 -0
  481. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/short_uxxxx/source.py +1 -0
  482. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/short_x/source.py +1 -0
  483. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unexpected_escaping/source.py +1 -0
  484. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/digit/source.py +1 -0
  485. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/not_digit/source.py +1 -0
  486. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/not_whitespace/source.py +1 -0
  487. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/not_word/source.py +1 -0
  488. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/whitespace/source.py +1 -0
  489. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/word/source.py +1 -0
  490. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/Uxxxxxxxx_out_of_range/source.py +1 -0
  491. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/only_backslash/source.py +1 -0
  492. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/short_Uxxxxxxxx/source.py +1 -0
  493. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/short_uxxxx/source.py +1 -0
  494. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/short_x/source.py +1 -0
  495. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unexpected_escaping/source.py +1 -0
  496. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/digit/source.py +1 -0
  497. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/not_digit/source.py +1 -0
  498. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/not_whitespace/source.py +1 -0
  499. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/not_word/source.py +1 -0
  500. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/whitespace/source.py +1 -0
  501. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/word/source.py +1 -0
  502. dev/test_data/parse_retree/unexpected/invalid_character_range/source.py +1 -0
  503. dev/test_data/parse_retree/unexpected/invalid_quantifier/at_least_x/source.py +1 -0
  504. dev/test_data/parse_retree/unexpected/invalid_quantifier/between_3_and_x/source.py +1 -0
  505. dev/test_data/parse_retree/unexpected/invalid_quantifier/exactly_x/source.py +1 -0
  506. dev/test_data/parse_retree/unexpected/unhandled_group_directives/source.py +1 -0
  507. dev/test_data/parse_retree/unexpected/unterminated/character_set/source.py +1 -0
  508. dev/test_data/parse_retree/unexpected/unterminated/group/source.py +1 -0
  509. dev/test_data/parse_retree/unexpected/unterminated/group_of_union_of_empty_concatenations/source.py +1 -0
  510. dev/test_data/parse_retree/unexpected/unterminated/quantifier/source.py +1 -0
  511. dev/test_data/parse_retree/unexpected/unterminated/quantifier_with_comma/source.py +1 -0
  512. dev/test_data/parse_retree/unexpected/unterminated/quantifier_with_number_and_comma/source.py +1 -0
  513. dev/test_data/proto/test_main/expected/abstract_and_concrete_classes/meta_model.py +37 -0
  514. dev/test_data/proto/test_main/expected/concrete_class_with_descendants/meta_model.py +30 -0
  515. dev/test_data/proto/test_main/expected/concrete_class_with_enum/meta_model.py +21 -0
  516. dev/test_data/proto/test_main/expected/concrete_class_with_list_of_instances/meta_model.py +21 -0
  517. dev/test_data/proto/test_main/expected/concrete_class_with_primitive_attributes/meta_model.py +41 -0
  518. dev/test_data/python_protobuf/test_main/abstract_and_concrete_classes/expected_output/pbization.py +532 -0
  519. dev/test_data/python_protobuf/test_main/abstract_and_concrete_classes/meta_model.py +37 -0
  520. dev/test_data/python_protobuf/test_main/concrete_class_with_descendant/expected_output/pbization.py +527 -0
  521. dev/test_data/python_protobuf/test_main/concrete_class_with_descendant/meta_model.py +27 -0
  522. dev/test_data/python_protobuf/test_main/concrete_class_with_enum/expected_output/pbization.py +290 -0
  523. dev/test_data/python_protobuf/test_main/concrete_class_with_enum/meta_model.py +21 -0
  524. dev/test_data/python_protobuf/test_main/concrete_class_with_list_of_instances/expected_output/pbization.py +328 -0
  525. dev/test_data/python_protobuf/test_main/concrete_class_with_list_of_instances/meta_model.py +23 -0
  526. dev/test_data/python_protobuf/test_main/concrete_class_with_primitive_attributes/expected_output/pbization.py +274 -0
  527. dev/test_data/python_protobuf/test_main/concrete_class_with_primitive_attributes/meta_model.py +41 -0
  528. dev/test_data/rdf_shacl/test_main/expected/regression_when_lang_string_class_is_missing/meta_model.py +29 -0
  529. dev/test_data/rdf_shacl/test_main/expected/regression_when_len_constraints_on_inherited_property/meta_model.py +27 -0
  530. dev/test_data/rdf_shacl/test_main/unexpected/regression_len_constraint_on_class_property/meta_model.py +61 -0
  531. dev/test_data/real_meta_models/aas_core_meta.v3.py +5721 -0
  532. dev/test_data/smoke/test_main/unexpected/infer_for_schema_error/meta_model.py +12 -0
  533. dev/test_data/smoke/test_main/unexpected/intermediate_error/meta_model.py +18 -0
  534. dev/test_data/smoke/test_main/unexpected/parse_error/meta_model.py +5 -0
  535. dev/test_data/smoke/test_main/unexpected/pattern_verification_unparsable_regex/direct_match/meta_model.py +8 -0
  536. dev/test_data/smoke/test_main/unexpected/type_error/meta_model.py +18 -0
  537. dev/tests/__init__.py +1 -0
  538. dev/tests/common.py +197 -0
  539. dev/tests/cpp/__init__.py +0 -0
  540. dev/tests/cpp/test_common.py +32 -0
  541. dev/tests/cpp/test_main.py +144 -0
  542. dev/tests/cpp/test_pattern.py +188 -0
  543. dev/tests/cpp/test_verification.py +189 -0
  544. dev/tests/cpp/test_yielding.py +225 -0
  545. dev/tests/csharp/__init__.py +0 -0
  546. dev/tests/csharp/live_test_main.py +109 -0
  547. dev/tests/csharp/test_common.py +28 -0
  548. dev/tests/csharp/test_description.py +684 -0
  549. dev/tests/csharp/test_main.py +129 -0
  550. dev/tests/csharp/test_structure.py +93 -0
  551. dev/tests/csharp/test_verification.py +82 -0
  552. dev/tests/description.py +29 -0
  553. dev/tests/golang/__init__.py +0 -0
  554. dev/tests/golang/test_common.py +78 -0
  555. dev/tests/golang/test_main.py +128 -0
  556. dev/tests/infer_for_schema/__init__.py +0 -0
  557. dev/tests/infer_for_schema/common.py +47 -0
  558. dev/tests/infer_for_schema/test_len_on_properties.py +955 -0
  559. dev/tests/infer_for_schema/test_len_on_self.py +580 -0
  560. dev/tests/infer_for_schema/test_patterns_on_properties.py +686 -0
  561. dev/tests/infer_for_schema/test_patterns_on_self.py +258 -0
  562. dev/tests/infer_for_schema/test_property_in_set_of_enumeration_literals.py +600 -0
  563. dev/tests/infer_for_schema/test_property_in_set_of_primitives.py +549 -0
  564. dev/tests/intermediate/__init__.py +0 -0
  565. dev/tests/intermediate/test_constructor.py +719 -0
  566. dev/tests/intermediate/test_hierarchy.py +221 -0
  567. dev/tests/intermediate/test_revm.py +134 -0
  568. dev/tests/intermediate/test_translate.py +337 -0
  569. dev/tests/intermediate/test_type_inference.py +333 -0
  570. dev/tests/intermediate/test_types.py +169 -0
  571. dev/tests/java/__init__.py +0 -0
  572. dev/tests/java/test_common.py +20 -0
  573. dev/tests/java/test_description.py +128 -0
  574. dev/tests/java/test_main.py +234 -0
  575. dev/tests/jsonld_context/test_main.py +79 -0
  576. dev/tests/opcua/__init__.py +3 -0
  577. dev/tests/opcua/test_main.py +110 -0
  578. dev/tests/our_jsonschema/__init__.py +3 -0
  579. dev/tests/our_jsonschema/test_main.py +232 -0
  580. dev/tests/parse/__init__.py +0 -0
  581. dev/tests/parse/test_parse.py +503 -0
  582. dev/tests/parse/test_retree.py +272 -0
  583. dev/tests/proto/__init__.py +0 -0
  584. dev/tests/proto/test_main.py +112 -0
  585. dev/tests/python/__init__.py +0 -0
  586. dev/tests/python/test_common.py +124 -0
  587. dev/tests/python/test_main.py +126 -0
  588. dev/tests/python/test_xml_playground.py +254 -0
  589. dev/tests/python_protobuf/__init__.py +0 -0
  590. dev/tests/python_protobuf/test_main.py +111 -0
  591. dev/tests/rdf_shacl/__init__.py +0 -0
  592. dev/tests/rdf_shacl/test_common.py +32 -0
  593. dev/tests/rdf_shacl/test_description.py +223 -0
  594. dev/tests/rdf_shacl/test_main.py +194 -0
  595. dev/tests/smoke/__init__.py +0 -0
  596. dev/tests/smoke/test_main.py +83 -0
  597. dev/tests/test_common.py +94 -0
  598. dev/tests/typescript/__init__.py +0 -0
  599. dev/tests/typescript/test_common.py +108 -0
  600. dev/tests/typescript/test_main.py +125 -0
  601. dev/tests/xsd/__init__.py +0 -0
  602. dev/tests/xsd/test_main.py +227 -0
  603. dev/tests/yielding/__init__.py +0 -0
  604. dev/tests/yielding/test_linear.py +558 -0
@@ -0,0 +1,234 @@
1
+ # pylint: disable=missing-docstring
2
+
3
+ import contextlib
4
+ import io
5
+ import os
6
+ import pathlib
7
+ import tempfile
8
+ import unittest
9
+
10
+ import aas_core_codegen.main
11
+
12
+ import tests.common
13
+
14
+ _TYPES = [
15
+ "AdministrativeInformation",
16
+ "AnnotatedRelationshipElement",
17
+ "AssetAdministrationShell",
18
+ "AssetInformation",
19
+ "BasicEventElement",
20
+ "Blob",
21
+ "Capability",
22
+ "ConceptDescription",
23
+ "DataSpecificationIec61360",
24
+ "EmbeddedDataSpecification",
25
+ "Entity",
26
+ "Environment",
27
+ "EventPayload",
28
+ "Extension",
29
+ "File",
30
+ "Key",
31
+ "LangStringDefinitionTypeIec61360",
32
+ "LangStringNameType",
33
+ "LangStringPreferredNameTypeIec61360",
34
+ "LangStringShortNameTypeIec61360",
35
+ "LangStringTextType",
36
+ "LevelType",
37
+ "MultiLanguageProperty",
38
+ "Operation",
39
+ "OperationVariable",
40
+ "Property",
41
+ "Qualifier",
42
+ "Range",
43
+ "ReferenceElement",
44
+ "Reference",
45
+ "RelationshipElement",
46
+ "Resource",
47
+ "SpecificAssetId",
48
+ "SubmodelElementCollection",
49
+ "SubmodelElementList",
50
+ "Submodel",
51
+ "ValueList",
52
+ "ValueReferencePair",
53
+ ]
54
+
55
+ _CONSTANTS = [pathlib.Path("constants/Constants.java")]
56
+ _COPYING = [pathlib.Path("copying/Copying.java")]
57
+ _ENHANCING = [pathlib.Path(f"enhancing/Enhanced{t}.java") for t in _TYPES] + [
58
+ pathlib.Path("enhancing/Enhanced.java"),
59
+ pathlib.Path("enhancing/Enhancer.java"),
60
+ pathlib.Path("enhancing/Unwrapper.java"),
61
+ pathlib.Path("enhancing/Wrapper.java"),
62
+ ]
63
+ # NOTE (empwilli 2024-03-26): we create generators only for types that have
64
+ # non-mandatory attributes.
65
+ _GENERATION = [
66
+ pathlib.Path(f"generation/{t}Builder.java")
67
+ for t in _TYPES
68
+ if t
69
+ not in (
70
+ "EmbeddedDataSpecification",
71
+ "Key",
72
+ "LangStringDefinitionTypeIec61360",
73
+ "LangStringNameType",
74
+ "LangStringPreferredNameTypeIec61360",
75
+ "LangStringShortNameTypeIec61360",
76
+ "LangStringTextType",
77
+ "LevelType",
78
+ "OperationVariable",
79
+ "ValueList",
80
+ "ValueReferencePair",
81
+ )
82
+ ]
83
+ _JSONIZATION = [pathlib.Path("jsonization/Jsonization.java")]
84
+ _REPORTING = [pathlib.Path("reporting/Reporting.java")]
85
+ _STRINGIFICATION = [pathlib.Path("stringification/Stringification.java")]
86
+ _VERIFICATION = [pathlib.Path("verification/Verification.java")]
87
+ _STRUCTURE = (
88
+ [
89
+ pathlib.Path("types/enums/AasSubmodelElements.java"),
90
+ pathlib.Path("types/enums/AssetKind.java"),
91
+ pathlib.Path("types/enums/DataTypeDefXsd.java"),
92
+ pathlib.Path("types/enums/DataTypeIec61360.java"),
93
+ pathlib.Path("types/enums/Direction.java"),
94
+ pathlib.Path("types/enums/EntityType.java"),
95
+ pathlib.Path("types/enums/KeyTypes.java"),
96
+ pathlib.Path("types/enums/ModellingKind.java"),
97
+ pathlib.Path("types/enums/QualifierKind.java"),
98
+ pathlib.Path("types/enums/ReferenceTypes.java"),
99
+ pathlib.Path("types/enums/StateOfEvent.java"),
100
+ ]
101
+ + [pathlib.Path(f"types/impl/{t}.java") for t in _TYPES]
102
+ + [pathlib.Path(f"types/model/I{t}.java") for t in _TYPES]
103
+ )
104
+ _VISITATION = [
105
+ pathlib.Path("visitation/AbstractTransformer.java"),
106
+ pathlib.Path("visitation/AbstractTransformerWithContext.java"),
107
+ pathlib.Path("visitation/AbstractVisitor.java"),
108
+ pathlib.Path("visitation/AbstractVisitorWithContext.java"),
109
+ pathlib.Path("visitation/ITransformer.java"),
110
+ pathlib.Path("visitation/ITransformerWithContext.java"),
111
+ pathlib.Path("visitation/IVisitor.java"),
112
+ pathlib.Path("visitation/IVisitorWithContext.java"),
113
+ pathlib.Path("visitation/VisitorThrough.java"),
114
+ ]
115
+ XMLIZATION = [pathlib.Path("xmlization/Xmlization.java")]
116
+
117
+ GENERATED_FILES = (
118
+ _CONSTANTS
119
+ + _COPYING
120
+ + _ENHANCING
121
+ + _GENERATION
122
+ + _JSONIZATION
123
+ + _REPORTING
124
+ + _STRINGIFICATION
125
+ + _VERIFICATION
126
+ + _STRUCTURE
127
+ + _VISITATION
128
+ )
129
+
130
+
131
+ class Test_against_recorded(unittest.TestCase):
132
+ def test_cases(self) -> None:
133
+ repo_dir = pathlib.Path(os.path.realpath(__file__)).parent.parent.parent.parent
134
+
135
+ parent_case_dir = repo_dir / "dev" / "test_data" / "java" / "test_main"
136
+ assert parent_case_dir.exists() and parent_case_dir.is_dir(), parent_case_dir
137
+
138
+ for model_pth in tests.common.REAL_META_MODEL_PATHS:
139
+ case_dir = parent_case_dir / model_pth.stem
140
+ assert case_dir.is_dir(), case_dir
141
+
142
+ snippets_dir = case_dir / "input/snippets"
143
+ assert snippets_dir.exists() and snippets_dir.is_dir(), snippets_dir
144
+
145
+ expected_output_dir = case_dir / "expected_output"
146
+
147
+ with contextlib.ExitStack() as exit_stack:
148
+ if tests.common.RERECORD:
149
+ output_dir = expected_output_dir
150
+ expected_output_dir.mkdir(exist_ok=True, parents=True)
151
+ else:
152
+ assert (
153
+ expected_output_dir.exists() and expected_output_dir.is_dir()
154
+ ), expected_output_dir
155
+
156
+ # pylint: disable=consider-using-with
157
+ tmp_dir = tempfile.TemporaryDirectory()
158
+ exit_stack.push(tmp_dir)
159
+ output_dir = pathlib.Path(tmp_dir.name)
160
+
161
+ params = aas_core_codegen.main.Parameters(
162
+ model_path=model_pth,
163
+ target=aas_core_codegen.main.Target.JAVA,
164
+ snippets_dir=snippets_dir,
165
+ output_dir=output_dir,
166
+ )
167
+
168
+ stdout = io.StringIO()
169
+ stderr = io.StringIO()
170
+
171
+ return_code = aas_core_codegen.main.execute(
172
+ params=params, stdout=stdout, stderr=stderr
173
+ )
174
+
175
+ if stderr.getvalue() != "":
176
+ raise AssertionError(
177
+ f"Expected no stderr on valid models, but got:\n"
178
+ f"{stderr.getvalue()}"
179
+ )
180
+
181
+ self.assertEqual(
182
+ 0, return_code, "Expected 0 return code on valid models"
183
+ )
184
+
185
+ stdout_pth = expected_output_dir / "stdout.txt"
186
+ normalized_stdout = stdout.getvalue().replace(
187
+ str(output_dir), "<output dir>"
188
+ )
189
+
190
+ if tests.common.RERECORD:
191
+ stdout_pth.write_text(normalized_stdout, encoding="utf-8")
192
+ else:
193
+ self.assertEqual(
194
+ normalized_stdout,
195
+ stdout_pth.read_text(encoding="utf-8"),
196
+ stdout_pth,
197
+ )
198
+
199
+ for relevant_rel_pth in GENERATED_FILES:
200
+ expected_pth = expected_output_dir / relevant_rel_pth
201
+ output_pth = output_dir / relevant_rel_pth
202
+
203
+ if not output_pth.exists():
204
+ raise FileNotFoundError(
205
+ f"The output file is missing: {output_pth}"
206
+ )
207
+
208
+ try:
209
+ output = output_pth.read_text(encoding="utf-8")
210
+ except Exception as exception:
211
+ raise RuntimeError(
212
+ f"Failed to read the output from {output_pth}"
213
+ ) from exception
214
+
215
+ if tests.common.RERECORD:
216
+ expected_pth.write_text(output, encoding="utf-8")
217
+ else:
218
+ try:
219
+ expected_output = expected_pth.read_text(encoding="utf-8")
220
+ except Exception as exception:
221
+ raise RuntimeError(
222
+ f"Failed to read the expected output "
223
+ f"from {expected_pth}"
224
+ ) from exception
225
+
226
+ self.assertEqual(
227
+ expected_output,
228
+ output,
229
+ f"The files {expected_pth} and {output_pth} do not match.",
230
+ )
231
+
232
+
233
+ if __name__ == "__main__":
234
+ unittest.main()
@@ -0,0 +1,79 @@
1
+ import contextlib
2
+ import pathlib
3
+ import tempfile
4
+ import unittest
5
+ import io
6
+
7
+ from aas_core_codegen.main import Parameters, Target, execute
8
+
9
+ import tests.common
10
+ from tests.rdf_shacl.test_main import REPO_DIR
11
+
12
+
13
+ class Test_jsonld_context(unittest.TestCase):
14
+ def test_jsonld_context_generation(self) -> None:
15
+ for model_pth in tests.common.REAL_META_MODEL_PATHS:
16
+ case_dir = (
17
+ REPO_DIR / "dev" / "test_data" / "jsonld_context" / model_pth.stem
18
+ )
19
+ expected_output_dir = case_dir / "output"
20
+
21
+ with contextlib.ExitStack() as exit_stack:
22
+ if tests.common.RERECORD:
23
+ output_dir = expected_output_dir
24
+ expected_output_dir.mkdir(exist_ok=True, parents=True)
25
+ else:
26
+ assert (
27
+ expected_output_dir.exists() and expected_output_dir.is_dir()
28
+ ), expected_output_dir
29
+
30
+ # pylint: disable=consider-using-with
31
+ tmp_dir = tempfile.TemporaryDirectory()
32
+ exit_stack.push(tmp_dir)
33
+ output_dir = pathlib.Path(tmp_dir.name)
34
+
35
+ params = Parameters(
36
+ model_path=model_pth,
37
+ target=Target.JSONLD_CONTEXT,
38
+ snippets_dir=case_dir,
39
+ output_dir=output_dir,
40
+ )
41
+
42
+ stdout = io.StringIO()
43
+ stderr = io.StringIO()
44
+ return_code = execute(params=params, stdout=stdout, stderr=stderr)
45
+ if stderr.getvalue() != "":
46
+ raise AssertionError(
47
+ f"Expected no stderr on valid models, but got:\n"
48
+ f"{stderr.getvalue()}"
49
+ )
50
+
51
+ self.assertEqual(
52
+ 0, return_code, "Expected 0 return code on valid models"
53
+ )
54
+
55
+ if not tests.common.RERECORD:
56
+ generated_jsonld_context_path = output_dir / "context.jsonld"
57
+ generated_jsonld_context = generated_jsonld_context_path.read_text(
58
+ encoding="utf-8"
59
+ )
60
+
61
+ expected_jsonld_context_path = (
62
+ expected_output_dir / "context.jsonld"
63
+ )
64
+ expected_jsonld_context = expected_jsonld_context_path.read_text(
65
+ encoding="utf-8"
66
+ )
67
+
68
+ self.assertEqual(
69
+ generated_jsonld_context,
70
+ expected_jsonld_context,
71
+ f"The generated and the expected context differ. "
72
+ f"The expected JSON-LD context lives "
73
+ f"at: {expected_jsonld_context_path}, while the generated one "
74
+ f"at: {generated_jsonld_context_path}",
75
+ )
76
+
77
+
78
+ if __name__ == "__main__":
79
+ unittest.main()
@@ -0,0 +1,3 @@
1
+ # NOTE (mristin, 2022-04-08):
2
+ # We have to rename this directory so that it does not conflict with ``jsonschema``
3
+ # which is a development dependency.
@@ -0,0 +1,110 @@
1
+ # pylint: disable=missing-docstring
2
+
3
+ import contextlib
4
+ import io
5
+ import os
6
+ import pathlib
7
+ import tempfile
8
+ import unittest
9
+
10
+ import aas_core_codegen.main
11
+ import aas_core_codegen.opcua.main
12
+ import tests.common
13
+
14
+
15
+ class Test_against_recorded(unittest.TestCase):
16
+ def test_against_meta_models(self) -> None:
17
+ repo_root = pathlib.Path(os.path.realpath(__file__)).parent.parent.parent.parent
18
+ base_case_dir = repo_root / "dev" / "test_data" / "opcua" / "test_main"
19
+
20
+ test_cases = tests.common.test_cases_from_base_case_dir(
21
+ base_case_dir=base_case_dir
22
+ ) + tests.common.test_cases_from_real_world_models(
23
+ base_case_dir=base_case_dir,
24
+ real_meta_model_paths=tests.common.REAL_META_MODEL_PATHS,
25
+ )
26
+
27
+ for test_case in test_cases:
28
+ snippets_dir = test_case.case_dir / "input/snippets"
29
+ assert snippets_dir.exists() and snippets_dir.is_dir(), snippets_dir
30
+
31
+ expected_output_dir = test_case.case_dir / "expected_output"
32
+
33
+ with contextlib.ExitStack() as exit_stack:
34
+ if tests.common.RERECORD:
35
+ output_dir = expected_output_dir
36
+ expected_output_dir.mkdir(exist_ok=True, parents=True)
37
+ else:
38
+ assert (
39
+ expected_output_dir.exists() and expected_output_dir.is_dir()
40
+ ), expected_output_dir
41
+
42
+ # pylint: disable=consider-using-with
43
+ tmp_dir = tempfile.TemporaryDirectory()
44
+ exit_stack.push(tmp_dir)
45
+ output_dir = pathlib.Path(tmp_dir.name)
46
+
47
+ params = aas_core_codegen.main.Parameters(
48
+ model_path=test_case.model_path,
49
+ target=aas_core_codegen.main.Target.OPCUA,
50
+ snippets_dir=snippets_dir,
51
+ output_dir=output_dir,
52
+ )
53
+
54
+ stdout = io.StringIO()
55
+ stderr = io.StringIO()
56
+
57
+ return_code = aas_core_codegen.main.execute(
58
+ params=params, stdout=stdout, stderr=stderr
59
+ )
60
+
61
+ if stderr.getvalue() != "":
62
+ raise AssertionError(
63
+ f"Expected no stderr on valid models, but got:\n"
64
+ f"{stderr.getvalue()}\n"
65
+ f"for the meta-model: {test_case.model_path}"
66
+ )
67
+
68
+ self.assertEqual(
69
+ 0, return_code, "Expected 0 return code on valid models"
70
+ )
71
+
72
+ stdout_pth = expected_output_dir / "stdout.txt"
73
+ normalized_stdout = stdout.getvalue().replace(
74
+ str(output_dir), "<output dir>"
75
+ )
76
+
77
+ if tests.common.RERECORD:
78
+ stdout_pth.write_text(normalized_stdout, encoding="utf-8")
79
+ else:
80
+ self.assertEqual(
81
+ normalized_stdout,
82
+ stdout_pth.read_text(encoding="utf-8"),
83
+ stdout_pth,
84
+ )
85
+
86
+ for relevant_rel_pth in [
87
+ pathlib.Path("nodeset.xml"),
88
+ ]:
89
+ expected_pth = expected_output_dir / relevant_rel_pth
90
+ output_pth = output_dir / relevant_rel_pth
91
+
92
+ if not output_pth.exists():
93
+ raise FileNotFoundError(
94
+ f"The output file is missing: {output_pth}"
95
+ )
96
+
97
+ if tests.common.RERECORD:
98
+ expected_pth.write_text(
99
+ output_pth.read_text(encoding="utf-8"), encoding="utf-8"
100
+ )
101
+ else:
102
+ self.assertEqual(
103
+ expected_pth.read_text(encoding="utf-8"),
104
+ output_pth.read_text(encoding="utf-8"),
105
+ f"The files {expected_pth} and {output_pth} do not match.",
106
+ )
107
+
108
+
109
+ if __name__ == "__main__":
110
+ unittest.main()
@@ -0,0 +1,3 @@
1
+ # NOTE (mristin, 2022-04-08):
2
+ # We have to rename this directory so that it does not conflict with ``jsonschema``
3
+ # which is a development dependency.
@@ -0,0 +1,232 @@
1
+ # pylint: disable=missing-docstring
2
+
3
+ import contextlib
4
+ import io
5
+ import json
6
+ import os
7
+ import pathlib
8
+ import tempfile
9
+ import unittest
10
+ import warnings
11
+
12
+ import tests.common
13
+
14
+ with warnings.catch_warnings():
15
+ warnings.filterwarnings("ignore", category=DeprecationWarning)
16
+ # NOTE (mristin, 2022-04-08):
17
+ # We need to disable warnings. Jsonschema package at the latest version (4.4.0) has
18
+ # a problem with JSON schema draft 2019-09 and crashes with an recursion error,
19
+ # see: https://github.com/python-jsonschema/jsonschema/issues/847.
20
+ #
21
+ # We revert back to jsonschema 3.2.0, which can not handle 2019-09, but still seems
22
+ # to validate correctly our examples.
23
+ import jsonschema
24
+
25
+ import aas_core_codegen.main
26
+ import aas_core_codegen.jsonschema.main
27
+
28
+
29
+ class Test_against_recorded(unittest.TestCase):
30
+ _REPO_DIR = pathlib.Path(os.path.realpath(__file__)).parent.parent.parent.parent
31
+ PARENT_CASE_DIR = _REPO_DIR / "dev" / "test_data" / "jsonschema" / "test_main"
32
+
33
+ def test_against_meta_models(self) -> None:
34
+ test_cases = tests.common.test_cases_from_base_case_dir(
35
+ base_case_dir=Test_against_recorded.PARENT_CASE_DIR
36
+ ) + tests.common.test_cases_from_real_world_models(
37
+ base_case_dir=Test_against_recorded.PARENT_CASE_DIR,
38
+ real_meta_model_paths=tests.common.REAL_META_MODEL_PATHS,
39
+ )
40
+
41
+ for test_case in test_cases:
42
+ snippets_dir = test_case.case_dir / "input/snippets"
43
+ assert snippets_dir.exists() and snippets_dir.is_dir(), snippets_dir
44
+
45
+ expected_output_dir = test_case.case_dir / "expected_output"
46
+
47
+ with contextlib.ExitStack() as exit_stack:
48
+ if tests.common.RERECORD:
49
+ output_dir = expected_output_dir
50
+ expected_output_dir.mkdir(exist_ok=True, parents=True)
51
+ else:
52
+ assert (
53
+ expected_output_dir.exists() and expected_output_dir.is_dir()
54
+ ), expected_output_dir
55
+
56
+ # pylint: disable=consider-using-with
57
+ tmp_dir = tempfile.TemporaryDirectory()
58
+ exit_stack.push(tmp_dir)
59
+ output_dir = pathlib.Path(tmp_dir.name)
60
+
61
+ params = aas_core_codegen.main.Parameters(
62
+ model_path=test_case.model_path,
63
+ target=aas_core_codegen.main.Target.JSONSCHEMA,
64
+ snippets_dir=snippets_dir,
65
+ output_dir=output_dir,
66
+ )
67
+
68
+ stdout = io.StringIO()
69
+ stderr = io.StringIO()
70
+
71
+ return_code = aas_core_codegen.main.execute(
72
+ params=params, stdout=stdout, stderr=stderr
73
+ )
74
+
75
+ if stderr.getvalue() != "":
76
+ raise AssertionError(
77
+ f"Expected no stderr on valid models, but got:\n"
78
+ f"{stderr.getvalue()}"
79
+ )
80
+
81
+ self.assertEqual(
82
+ 0, return_code, "Expected 0 return code on valid models"
83
+ )
84
+
85
+ stdout_pth = expected_output_dir / "stdout.txt"
86
+ normalized_stdout = stdout.getvalue().replace(
87
+ str(output_dir), "<output dir>"
88
+ )
89
+
90
+ if tests.common.RERECORD:
91
+ stdout_pth.write_text(normalized_stdout, encoding="utf-8")
92
+ else:
93
+ self.assertEqual(
94
+ normalized_stdout,
95
+ stdout_pth.read_text(encoding="utf-8"),
96
+ stdout_pth,
97
+ )
98
+
99
+ for relevant_rel_pth in [
100
+ pathlib.Path("schema.json"),
101
+ ]:
102
+ expected_pth = expected_output_dir / relevant_rel_pth
103
+ output_pth = output_dir / relevant_rel_pth
104
+
105
+ if not output_pth.exists():
106
+ raise FileNotFoundError(
107
+ f"The output file is missing: {output_pth}"
108
+ )
109
+
110
+ if tests.common.RERECORD:
111
+ expected_pth.write_text(
112
+ output_pth.read_text(encoding="utf-8"), encoding="utf-8"
113
+ )
114
+ else:
115
+ self.assertEqual(
116
+ expected_pth.read_text(encoding="utf-8"),
117
+ output_pth.read_text(encoding="utf-8"),
118
+ f"The files {expected_pth} and {output_pth} do not match.",
119
+ )
120
+
121
+ def test_on_examples(self) -> None:
122
+ assert (
123
+ Test_against_recorded.PARENT_CASE_DIR.exists()
124
+ and Test_against_recorded.PARENT_CASE_DIR.is_dir()
125
+ ), f"{Test_against_recorded.PARENT_CASE_DIR=}"
126
+
127
+ for case_dir in Test_against_recorded.PARENT_CASE_DIR.iterdir():
128
+ assert case_dir.is_dir(), case_dir
129
+
130
+ schema_pth = case_dir / "expected_output" / "schema.json"
131
+
132
+ with schema_pth.open("rt", encoding="utf-8") as fid:
133
+ schema = json.load(fid)
134
+
135
+ for data_pth in sorted(
136
+ (case_dir / "examples" / "expected").glob("**/*.json")
137
+ ):
138
+ with data_pth.open("rt", encoding="utf-8") as fid:
139
+ instance = json.load(fid)
140
+
141
+ try:
142
+ jsonschema.validate(instance=instance, schema=schema)
143
+ except jsonschema.ValidationError as err:
144
+ raise AssertionError(
145
+ f"Failed to validate {data_pth} against {schema_pth}"
146
+ ) from err
147
+
148
+
149
+ class Test_pattern_transpilation(unittest.TestCase):
150
+ def test_unescaped_above_ascii_character_in_bmp(self) -> None:
151
+ pattern = aas_core_codegen.jsonschema.main.fix_pattern_for_utf16("\ud7ff")
152
+ self.assertEqual("\ud7ff", pattern)
153
+
154
+ def test_escaped_above_ascii_character_in_bmp(self) -> None:
155
+ pattern = aas_core_codegen.jsonschema.main.fix_pattern_for_utf16("\\ud7ff")
156
+ self.assertEqual("\\ud7ff", pattern)
157
+
158
+ def test_unescaped_range_in_bmp(self) -> None:
159
+ pattern = aas_core_codegen.jsonschema.main.fix_pattern_for_utf16(
160
+ "[\x20-\uD7FF]"
161
+ )
162
+ self.assertEqual("[\x20-\uD7FF]", pattern)
163
+
164
+ def test_escaped_range_in_bmp(self) -> None:
165
+ pattern = aas_core_codegen.jsonschema.main.fix_pattern_for_utf16(
166
+ "[\\x20-\\ud7ff]"
167
+ )
168
+ self.assertEqual("[\\x20-\\ud7ff]", pattern)
169
+
170
+ def test_escaped_range_in_bmp_always_lowercase(self) -> None:
171
+ pattern = aas_core_codegen.jsonschema.main.fix_pattern_for_utf16(
172
+ "[\\x20-\\uD7FF]"
173
+ )
174
+ self.assertEqual("[\\x20-\\ud7ff]", pattern)
175
+
176
+ def test_unescaped_above_bmp(self) -> None:
177
+ pattern = aas_core_codegen.jsonschema.main.fix_pattern_for_utf16(
178
+ "[\U00010000-\U0010FFFF]"
179
+ )
180
+ self.assertEqual(
181
+ "(\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]"
182
+ "|\\udbff[\\udc00-\\udfff])",
183
+ pattern,
184
+ )
185
+
186
+ def test_escaped_above_bmp(self) -> None:
187
+ pattern = aas_core_codegen.jsonschema.main.fix_pattern_for_utf16(
188
+ "[\\U00010000-\\U0010FFFF]"
189
+ )
190
+ self.assertEqual(
191
+ "(\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]"
192
+ "|\\udbff[\\udc00-\\udfff])",
193
+ pattern,
194
+ )
195
+
196
+ def test_unescaped_special_ascii_characters(self) -> None:
197
+ pattern = aas_core_codegen.jsonschema.main.fix_pattern_for_utf16("[\t\n\r]")
198
+ self.assertEqual("[\\t\\n\\r]", pattern)
199
+
200
+ def test_escaped_special_ascii_characters(self) -> None:
201
+ pattern = aas_core_codegen.jsonschema.main.fix_pattern_for_utf16("[\\t\\n\\r]")
202
+ self.assertEqual("[\\t\\n\\r]", pattern)
203
+
204
+ def test_on_XML_string_pattern(self) -> None:
205
+ pattern = aas_core_codegen.jsonschema.main.fix_pattern_for_utf16(
206
+ r"^[\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD\U00010000-\U0010FFFF]*$"
207
+ )
208
+ self.assertEqual(
209
+ "^([\\x09\\x0a\\x0d\\x20-\\ud7ff\\ue000-\\ufffd]|\\ud800[\\udc00-\\udfff]"
210
+ "|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$",
211
+ pattern,
212
+ )
213
+
214
+ # NOTE (mristin, 2024-05-08):
215
+ # We also test for the JSON representation to test against a possible bug
216
+ # reported in:
217
+ # https://github.com/admin-shell-io/aas-specs/pull/426 and
218
+ # https://github.com/aas-core-works/aas-core-codegen/issues/485
219
+
220
+ pattern_json = json.dumps(pattern)
221
+ self.assertEqual(
222
+ # NOTE (mristin, 2024-05-08):
223
+ # Mind the ``r`` modifier for the string literals!
224
+ r'"^([\\x09\\x0a\\x0d\\x20-\\ud7ff\\ue000-\\ufffd]'
225
+ r"|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]"
226
+ r'|\\udbff[\\udc00-\\udfff])*$"',
227
+ pattern_json,
228
+ )
229
+
230
+
231
+ if __name__ == "__main__":
232
+ unittest.main()
File without changes