diff --git a/.claude/skills/epf-build/scripts/stub-db-create.ps1 b/.claude/skills/epf-build/scripts/stub-db-create.ps1 index c36a95029..df12dfaa3 100644 --- a/.claude/skills/epf-build/scripts/stub-db-create.ps1 +++ b/.claude/skills/epf-build/scripts/stub-db-create.ps1 @@ -1,4 +1,4 @@ -# stub-db-create v1.9 — Create temp 1C infobase with metadata stubs for EPF/ERF build +# stub-db-create v1.10 — Create temp 1C infobase with metadata stubs for EPF/ERF build # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -442,9 +442,13 @@ function Add-SourceObjectToConfig { # Содержимое объекта — как есть; в XML та же подстановка типа, .bsl копируются байт в байт. $srcContent = Join-Path (Split-Path $SourceXml -Parent) $name if (Test-Path $srcContent) { + # Длину префикса берём у РАЗРЕШЁННОГО пути, а не у переданной строки: путь может + # прийти с коротким именем (C:\Users\NSHIRO~1\…), а Get-ChildItem отдаёт полное — тогда + # отрезание по длине исходной строки оставляет в относительном пути чужие символы. + $srcRoot = (Get-Item -LiteralPath $srcContent).FullName.TrimEnd('\', '/') $dstContent = Join-Path $objDir $name - foreach ($f in (Get-ChildItem -Path $srcContent -Recurse -File)) { - $rel = $f.FullName.Substring($srcContent.Length).TrimStart('\', '/') + foreach ($f in (Get-ChildItem -LiteralPath $srcRoot -Recurse -File)) { + $rel = $f.FullName.Substring($srcRoot.Length).TrimStart('\', '/') $dst = Join-Path $dstContent $rel New-Item -ItemType Directory -Path (Split-Path $dst -Parent) -Force | Out-Null if ($f.Extension -ieq '.xml') { diff --git a/.claude/skills/epf-build/scripts/stub-db-create.py b/.claude/skills/epf-build/scripts/stub-db-create.py index 8b8871968..4c16cb645 100644 --- a/.claude/skills/epf-build/scripts/stub-db-create.py +++ b/.claude/skills/epf-build/scripts/stub-db-create.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# stub-db-create v1.9 — Create temp 1C infobase with metadata stubs for EPF/ERF build +# stub-db-create v1.10 — Create temp 1C infobase with metadata stubs for EPF/ERF build # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/tests/skills/cases/stub-db-create/_skill.json b/tests/skills/cases/stub-db-create/_skill.json new file mode 100644 index 000000000..f0f1cab2f --- /dev/null +++ b/tests/skills/cases/stub-db-create/_skill.json @@ -0,0 +1,5 @@ +{ + "script": "epf-build/scripts/stub-db-create", + "setup": "none", + "args": [] +} \ No newline at end of file diff --git a/tests/skills/cases/stub-db-create/embed-converts-object.json b/tests/skills/cases/stub-db-create/embed-converts-object.json new file mode 100644 index 000000000..1977724a4 --- /dev/null +++ b/tests/skills/cases/stub-db-create/embed-converts-object.json @@ -0,0 +1,64 @@ +{ + "name": "Внешняя обработка конвертируется в объект конфигурации", + "osOnly": "win32", + "fakePlatform": { + "exit": 1, + "log": "" + }, + "preRun": [ + { + "writeFile": { + "path": "src/Проба.xml", + "content": "\n\n\t\n\t\t\n\t\t\t\n\t\t\t\tcccccccc-4444-5555-6666-dddddddddddd\n\t\t\t\teeeeeeee-7777-8888-9999-ffffffffffff\n\t\t\t\n\t\t\n\t\t\n\t\t\tПроба\n\t\t\tExternalDataProcessor.Проба.Form.Форма\n\t\t\n\t\t\n\t\t\t
Форма
\n\t\t
\n\t
\n
\n" + } + }, + { + "writeFile": { + "path": "src/Проба/Ext/ObjectModule.bsl", + "content": "Процедура Проба()\r\n\tСообщить(\"ExternalDataProcessorObject.Проба\");\r\n\tСообщить(\"ExternalDataProcessor.Проба.Form.Форма\");\r\nКонецПроцедуры\r\n" + } + }, + { + "writeFile": { + "path": "src/Проба/Forms/Форма.xml", + "content": "\n\n\t
\n\t\t\n\t\t\tФорма\n\t\t\n\t
\n
\n" + } + } + ], + "args_extra": [ + "-SourceDir", + "{workDir}\\src", + "-V8Path", + "{workDir}\\fake.cmd", + "-TempBasePath", + "{workDir}\\base", + "-EmbedSourceFile", + "{workDir}\\src\\Проба.xml" + ], + "expect": { + "fileContains": [ + { + "file": "base\\cfg\\DataProcessors\\Проба.xml", + "text": [ + "", + "", + "DataProcessor.Проба.Form.Форма" + ] + }, + { + "file": "base\\cfg\\Configuration.xml", + "text": "Проба" + } + ], + "fileNotContains": { + "file": "base\\cfg\\DataProcessors\\Проба.xml", + "text": [ + "\n\n\t\n\t\t\n\t\t\t\n\t\t\t\tcccccccc-4444-5555-6666-dddddddddddd\n\t\t\t\teeeeeeee-7777-8888-9999-ffffffffffff\n\t\t\t\n\t\t\n\t\t\n\t\t\tПроба\n\t\t\tExternalDataProcessor.Проба.Form.Форма\n\t\t\n\t\t\n\t\t\t
Форма
\n\t\t
\n\t
\n
\n" + } + }, + { + "writeFile": { + "path": "src/Проба/Ext/ObjectModule.bsl", + "content": "Процедура Проба()\r\n\tСообщить(\"ExternalDataProcessorObject.Проба\");\r\n\tСообщить(\"ExternalDataProcessor.Проба.Form.Форма\");\r\nКонецПроцедуры\r\n" + } + }, + { + "writeFile": { + "path": "src/Проба/Forms/Форма.xml", + "content": "\n\n\t
\n\t\t\n\t\t\tФорма\n\t\t\n\t
\n
\n" + } + } + ], + "args_extra": [ + "-SourceDir", + "{workDir}\\src", + "-V8Path", + "{workDir}\\fake.cmd", + "-TempBasePath", + "{workDir}\\base", + "-EmbedSourceFile", + "{workDir}\\src\\Проба.xml" + ], + "expect": { + "filesEqual": [ + { + "actual": "base/cfg/DataProcessors/Проба/Ext/ObjectModule.bsl", + "expected": "src/Проба/Ext/ObjectModule.bsl" + } + ], + "fileContains": { + "file": "base\\cfg\\DataProcessors\\Проба\\Ext\\ObjectModule.bsl", + "text": "ExternalDataProcessorObject.Проба" + } + }, + "expectError": true, + "noSnapshot": "проверяется равенство файлов, а не снэпшот" +} \ No newline at end of file diff --git a/tests/skills/cases/stub-db-create/embed-reissues-guids.json b/tests/skills/cases/stub-db-create/embed-reissues-guids.json new file mode 100644 index 000000000..8c8f2f591 --- /dev/null +++ b/tests/skills/cases/stub-db-create/embed-reissues-guids.json @@ -0,0 +1,60 @@ +{ + "name": "У копии все GUID свои", + "osOnly": "win32", + "fakePlatform": { + "exit": 1, + "log": "" + }, + "preRun": [ + { + "writeFile": { + "path": "src/Проба.xml", + "content": "\n\n\t\n\t\t\n\t\t\t\n\t\t\t\tcccccccc-4444-5555-6666-dddddddddddd\n\t\t\t\teeeeeeee-7777-8888-9999-ffffffffffff\n\t\t\t\n\t\t\n\t\t\n\t\t\tПроба\n\t\t\tExternalDataProcessor.Проба.Form.Форма\n\t\t\n\t\t\n\t\t\t
Форма
\n\t\t
\n\t
\n
\n" + } + }, + { + "writeFile": { + "path": "src/Проба/Ext/ObjectModule.bsl", + "content": "Процедура Проба()\r\n\tСообщить(\"ExternalDataProcessorObject.Проба\");\r\n\tСообщить(\"ExternalDataProcessor.Проба.Form.Форма\");\r\nКонецПроцедуры\r\n" + } + }, + { + "writeFile": { + "path": "src/Проба/Forms/Форма.xml", + "content": "\n\n\t
\n\t\t\n\t\t\tФорма\n\t\t\n\t
\n
\n" + } + } + ], + "args_extra": [ + "-SourceDir", + "{workDir}\\src", + "-V8Path", + "{workDir}\\fake.cmd", + "-TempBasePath", + "{workDir}\\base", + "-EmbedSourceFile", + "{workDir}\\src\\Проба.xml" + ], + "expect": { + "fileNotContains": [ + { + "file": "base\\cfg\\DataProcessors\\Проба.xml", + "text": [ + "aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb", + "cccccccc-4444-5555-6666-dddddddddddd", + "eeeeeeee-7777-8888-9999-ffffffffffff" + ] + }, + { + "file": "base\\cfg\\DataProcessors\\Проба\\Forms\\Форма.xml", + "text": "11111111-2222-3333-4444-555555555555" + } + ], + "fileContains": { + "file": "base\\cfg\\DataProcessors\\Проба.xml", + "text": "" + } + }, + "expectError": true, + "noSnapshot": "генерируются случайные GUID — снять эталон нельзя" +}