From 273296665ddfdcab7cf8b6a219a054a7f3e59279 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 11 Jul 2026 12:42:39 +0300 Subject: [PATCH] =?UTF-8?q?test(meta-decompile):=20=D0=BC=D0=B8=D0=BD?= =?UTF-8?q?=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B3=D1=80=D0=B5=D1=81=D1=81=20=D0=B4=D0=B5=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=BF=D0=B8=D0=BB=D1=8F=D1=82=D0=BE=D1=80=D0=B0=20(3=20=D0=BA?= =?UTF-8?q?=D0=B5=D0=B9=D1=81=D0=B0,=20ps1=3D=3Dpy)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit meta-decompile был единственным декомпилятором без коммит-кейсов (form/skd/mxl — имеют). Раньше единственный гард — ad-hoc ps1==py сверка по внешнему корпусу cfsrc (нет в репо). Кейсы (по образцу skd-decompile: preRun meta-compile → decompile → снэпшот workDir) закрывают ps1==py (оба рантайма против одного снэпшота) + дрейф/краш: - catalog-structural: ТЧ use (ForFolderAndItem), одноэлементный choiceParameters (unwrap), HE-синонимы аббревиатур в фикстуре (Договоры ЭДО / Ставка НДС). - ccot-value-type-marker: маркер fillValue:{typeDescription:true} у ValueType ПВХ (B). - error-bad-root: не-MetaDataObject root (Form.xml) → ring3 exit 3. Самодостаточны (meta-compile/form-add preRun, без external-фикстур) → гоняются на маке. NB: снэпшоты включают фикстуру meta-compile → дрейфят при смене его вывода (как form/skd-decompile). Co-Authored-By: Claude Opus 4.8 (1M context) --- tests/skills/cases/meta-decompile/_skill.json | 12 + .../meta-decompile/catalog-structural.json | 28 ++ .../ccot-value-type-marker.json | 22 ++ .../cases/meta-decompile/error-bad-root.json | 19 ++ .../Catalogs/ДоговорыЭДО.xml | 322 ++++++++++++++++++ .../Catalogs/ДоговорыЭДО/Ext/ObjectModule.bsl | 0 .../snapshots/catalog-structural/draft.json | 22 ++ .../ВидыСведений.xml | 307 +++++++++++++++++ .../ВидыСведений/Ext/ObjectModule.bsl | 0 .../ccot-value-type-marker/draft.json | 12 + 10 files changed, 744 insertions(+) create mode 100644 tests/skills/cases/meta-decompile/_skill.json create mode 100644 tests/skills/cases/meta-decompile/catalog-structural.json create mode 100644 tests/skills/cases/meta-decompile/ccot-value-type-marker.json create mode 100644 tests/skills/cases/meta-decompile/error-bad-root.json create mode 100644 tests/skills/cases/meta-decompile/snapshots/catalog-structural/Catalogs/ДоговорыЭДО.xml create mode 100644 tests/skills/cases/meta-decompile/snapshots/catalog-structural/Catalogs/ДоговорыЭДО/Ext/ObjectModule.bsl create mode 100644 tests/skills/cases/meta-decompile/snapshots/catalog-structural/draft.json create mode 100644 tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/ChartsOfCharacteristicTypes/ВидыСведений.xml create mode 100644 tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/ChartsOfCharacteristicTypes/ВидыСведений/Ext/ObjectModule.bsl create mode 100644 tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/draft.json diff --git a/tests/skills/cases/meta-decompile/_skill.json b/tests/skills/cases/meta-decompile/_skill.json new file mode 100644 index 00000000..2827ae16 --- /dev/null +++ b/tests/skills/cases/meta-decompile/_skill.json @@ -0,0 +1,12 @@ +{ + "script": "meta-decompile/scripts/meta-decompile", + "setup": "none", + "args": [ + { "flag": "-ObjectPath", "from": "workPath", "field": "objectPath" }, + { "flag": "-OutputPath", "from": "workPath", "field": "outputPath" } + ], + "snapshot": { + "root": "workDir", + "normalizeUuids": true + } +} diff --git a/tests/skills/cases/meta-decompile/catalog-structural.json b/tests/skills/cases/meta-decompile/catalog-structural.json new file mode 100644 index 00000000..900664b3 --- /dev/null +++ b/tests/skills/cases/meta-decompile/catalog-structural.json @@ -0,0 +1,28 @@ +{ + "name": "Декомпиляция справочника: ТЧ с use (A), одноэлементный choiceParameters (unwrap), синоним-аббревиатура (HE)", + "preRun": [ + { + "script": "meta-compile/scripts/meta-compile", + "input": { + "type": "Catalog", + "name": "ДоговорыЭДО", + "hierarchical": true, + "attributes": [ + "СтавкаНДС: Number(5,2)", + { "name": "Ответственный", "type": "String(50)", "choiceParameters": ["Отбор.Основной=Да"] } + ], + "tabularSections": { + "Представления": { "use": "ForFolderAndItem", "attributes": ["Язык: String(10)", "Текст: String(100)"] } + } + }, + "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } + } + ], + "params": { + "objectPath": "Catalogs/ДоговорыЭДО.xml", + "outputPath": "draft.json" + }, + "expect": { + "files": ["draft.json"] + } +} diff --git a/tests/skills/cases/meta-decompile/ccot-value-type-marker.json b/tests/skills/cases/meta-decompile/ccot-value-type-marker.json new file mode 100644 index 00000000..9963dac8 --- /dev/null +++ b/tests/skills/cases/meta-decompile/ccot-value-type-marker.json @@ -0,0 +1,22 @@ +{ + "name": "Декомпиляция ПВХ: маркер пустого типизированного FillValue (typeDescription, B)", + "preRun": [ + { + "script": "meta-compile/scripts/meta-compile", + "input": { + "type": "ChartOfCharacteristicTypes", + "name": "ВидыСведений", + "valueType": "String(25)", + "standardAttributes": { "ValueType": { "fillValue": { "typeDescription": true } } } + }, + "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } + } + ], + "params": { + "objectPath": "ChartsOfCharacteristicTypes/ВидыСведений.xml", + "outputPath": "draft.json" + }, + "expect": { + "files": ["draft.json"] + } +} diff --git a/tests/skills/cases/meta-decompile/error-bad-root.json b/tests/skills/cases/meta-decompile/error-bad-root.json new file mode 100644 index 00000000..f8add079 --- /dev/null +++ b/tests/skills/cases/meta-decompile/error-bad-root.json @@ -0,0 +1,19 @@ +{ + "name": "Ошибка: не-MetaDataObject root (Form.xml) → ring3", + "preRun": [ + { + "script": "meta-compile/scripts/meta-compile", + "input": { "type": "DataProcessor", "name": "Тест" }, + "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } + }, + { + "script": "form-add/scripts/form-add", + "args": { "-ObjectPath": "{workDir}/DataProcessors/Тест.xml", "-FormName": "Форма" } + } + ], + "params": { + "objectPath": "DataProcessors/Тест/Forms/Форма/Ext/Form.xml", + "outputPath": "draft.json" + }, + "expectError": "MetaDataObject" +} diff --git a/tests/skills/cases/meta-decompile/snapshots/catalog-structural/Catalogs/ДоговорыЭДО.xml b/tests/skills/cases/meta-decompile/snapshots/catalog-structural/Catalogs/ДоговорыЭДО.xml new file mode 100644 index 00000000..6097e14b --- /dev/null +++ b/tests/skills/cases/meta-decompile/snapshots/catalog-structural/Catalogs/ДоговорыЭДО.xml @@ -0,0 +1,322 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + ДоговорыЭДО + + + ru + Договоры ЭДО + + + + true + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 25 + String + Variable + WholeCatalog + false + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.ДоговорыЭДО.StandardAttribute.Description + Catalog.ДоговорыЭДО.StandardAttribute.Code + + Begin + DontUse + Directly + + + + + + + + + + + false + + + Automatic + Use + + + + + + Use + Auto + DontUse + false + false + + + + + СтавкаНДС + + + ru + Ставка НДС + + + + + xs:decimal + + 5 + 2 + Any + + + false + + + + false + + false + false + + + false + 0 + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + Ответственный + + + ru + Ответственный + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + + Да + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + + UUID-015 + UUID-016 + + + UUID-017 + UUID-018 + + + + Представления + + + ru + Представления + + + + + DontCheck + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + ForFolderAndItem + + + + + Язык + + + ru + Язык + + + + + xs:string + + 10 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + Текст + + + ru + Текст + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + Use + + + + + + + diff --git a/tests/skills/cases/meta-decompile/snapshots/catalog-structural/Catalogs/ДоговорыЭДО/Ext/ObjectModule.bsl b/tests/skills/cases/meta-decompile/snapshots/catalog-structural/Catalogs/ДоговорыЭДО/Ext/ObjectModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/meta-decompile/snapshots/catalog-structural/draft.json b/tests/skills/cases/meta-decompile/snapshots/catalog-structural/draft.json new file mode 100644 index 00000000..c567b509 --- /dev/null +++ b/tests/skills/cases/meta-decompile/snapshots/catalog-structural/draft.json @@ -0,0 +1,22 @@ +{ + "type": "Catalog", + "name": "ДоговорыЭДО", + "hierarchical": true, + "attributes": [ + "СтавкаНДС: Number(5,2)", + { + "name": "Ответственный", + "type": "String(50)", + "choiceParameters": { + "name": "Отбор.Основной", + "value": "Да" + } + } + ], + "tabularSections": { + "Представления": { + "use": "ForFolderAndItem", + "attributes": ["Язык: String(10)", "Текст: String(100)"] + } + } +} \ No newline at end of file diff --git a/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/ChartsOfCharacteristicTypes/ВидыСведений.xml b/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/ChartsOfCharacteristicTypes/ВидыСведений.xml new file mode 100644 index 00000000..71e9b3dd --- /dev/null +++ b/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/ChartsOfCharacteristicTypes/ВидыСведений.xml @@ -0,0 +1,307 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + + ВидыСведений + + + ru + Виды сведений + + + + true + false + + + xs:string + + 25 + Variable + + + false + true + 9 + Variable + 100 + WholeCharacteristicKind + true + true + AsDescription + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + true + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + Auto + InDialog + false + BothWays + + ChartOfCharacteristicTypes.ВидыСведений.StandardAttribute.Description + ChartOfCharacteristicTypes.ВидыСведений.StandardAttribute.Code + + DontUse + Begin + Directly + DontUse + Auto + + + + + + + + + + + + + Managed + Use + + + + + + DontUse + false + false + + + + diff --git a/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/ChartsOfCharacteristicTypes/ВидыСведений/Ext/ObjectModule.bsl b/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/ChartsOfCharacteristicTypes/ВидыСведений/Ext/ObjectModule.bsl new file mode 100644 index 00000000..e69de29b diff --git a/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/draft.json b/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/draft.json new file mode 100644 index 00000000..93cc5991 --- /dev/null +++ b/tests/skills/cases/meta-decompile/snapshots/ccot-value-type-marker/draft.json @@ -0,0 +1,12 @@ +{ + "type": "ChartOfCharacteristicTypes", + "name": "ВидыСведений", + "valueType": "String(25)", + "standardAttributes": { + "ValueType": { + "fillValue": { + "typeDescription": true + } + } + } +} \ No newline at end of file