diff --git a/.claude/skills/cf-edit/SKILL.md b/.claude/skills/cf-edit/SKILL.md index b903189a3..bbb38c52f 100644 --- a/.claude/skills/cf-edit/SKILL.md +++ b/.claude/skills/cf-edit/SKILL.md @@ -34,6 +34,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/cf-edit.ps1" -Confi | `modify-property` | `Ключ=Значение` (batch `;;`) | Изменить свойство | | `add-childObject` | `Type.Name` (batch `;;`) | Зарегистрировать уже существующий файл объекта в ChildObjects. Для создания нового объекта используй `/meta-compile`, `/role-compile`, `/subsystem-compile` — они регистрируют автоматически | | `remove-childObject` | `Type.Name` (batch `;;`) | Удалить объект из ChildObjects | +| `sort-childObjects` | вид, напр. `Catalog` (batch `;;`), либо пусто | Упорядочить ChildObjects по имени внутри вида. Без значения — все виды, кроме `Subsystem` | | `add-defaultRole` | `Role.Name` или `Name` | Добавить роль по умолчанию | | `remove-defaultRole` | `Role.Name` или `Name` | Удалить роль по умолчанию | | `set-defaultRoles` | Имена через `;;` | Заменить список ролей по умолчанию | diff --git a/.claude/skills/cf-edit/reference.md b/.claude/skills/cf-edit/reference.md index f5b67cddf..bfa27d735 100644 --- a/.claude/skills/cf-edit/reference.md +++ b/.claude/skills/cf-edit/reference.md @@ -39,6 +39,18 @@ Batch: `"Catalog.Товары ;; Document.Заказ ;; Enum.ВидыОплат"` +## sort-childObjects + +Упорядочивает объекты в `` по имени **внутри вида**. Значение — имя вида (`Catalog`, `Role`, …), batch через `;;`. Без значения обрабатываются все виды, какие есть в файле. + +``` +-Operation sort-childObjects — все виды, кроме Subsystem +-Operation sort-childObjects -Value "Catalog" — только справочники +-Operation sort-childObjects -Value "Catalog ;; Role" +``` + +`Subsystem` пропускается, пока вид не назван явно (`-Value "Subsystem"`): сортировка подсистем меняет порядок разделов в панели. + ## add-defaultRole / remove-defaultRole / set-defaultRoles Имя роли: `ПолныеПрава` или `Role.ПолныеПрава` (префикс `Role.` добавляется автоматически). diff --git a/.claude/skills/cf-edit/scripts/cf-edit.ps1 b/.claude/skills/cf-edit/scripts/cf-edit.ps1 index b256720cf..f6d7e403b 100644 --- a/.claude/skills/cf-edit/scripts/cf-edit.ps1 +++ b/.claude/skills/cf-edit/scripts/cf-edit.ps1 @@ -1,10 +1,10 @@ -# cf-edit v1.23 — Edit 1C configuration root (Configuration.xml) +# cf-edit v1.24 — Edit 1C configuration root (Configuration.xml) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills [CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)][Alias('Path')][string]$ConfigPath, [string]$DefinitionFile, - [ValidateSet("modify-property","add-childObject","remove-childObject","add-defaultRole","remove-defaultRole","set-defaultRoles","set-panels","set-home-page")] + [ValidateSet("modify-property","add-childObject","remove-childObject","add-defaultRole","remove-defaultRole","set-defaultRoles","set-panels","set-home-page","sort-childObjects")] [string]$Operation, [string]$Value, [switch]$NoValidate @@ -376,6 +376,21 @@ function Import-Fragment([string]$xmlString) { } # --- Parse batch value (split by ;;) --- + +# Имя вида из пользовательского ввода → каноническое имя или $null. +# Ввод прощающий: регистр не важен, принимается имя каталога выгрузки (Catalogs → Catalog) +# и русское имя вида в единственном и множественном числе. +function Resolve-TypeName([string]$token) { + $key = "$token".Trim() + if (-not $key) { return $null } + foreach ($canon in $script:typeOrder) { if ($canon -eq $key) { return $canon } } + $byDir = $script:dirToType[$key.ToLowerInvariant()] + if ($byDir) { return $byDir } + $ru = $script:ruTypeMap[$key.ToLowerInvariant()] + if ($ru) { return $ru } + return $null +} + function Parse-BatchValue([string]$val) { $items = @() foreach ($part in $val.Split(";;")) { @@ -441,6 +456,169 @@ function Do-ModifyProperty([string]$batchVal) { } # --- Operation: add-childObject --- +# Куда навык ставит новую запись в — настройка newObjectPosition. +# databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML, +# иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида +# (так дописывает Конфигуратор); byName — по имени среди объектов того же вида. +# Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard: +# настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда +# оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный. +# configSrc считается от каталога .v8-project.json, как задокументировано в +# docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs. +function Get-NewObjectPosition([string]$cfgDir) { + try { + if (-not $cfgDir) { $cfgDir = "." } + $pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir)) + if (-not $pj) { $pj = Find-V8Project (Get-Location).Path } + if (-not $pj) { return "end" } + $proj = Get-Content -Raw $pj | ConvertFrom-Json + $projDir = [System.IO.Path]::GetDirectoryName($pj) + $cfgFull = [System.IO.Path]::GetFullPath($cfgDir).TrimEnd('\', '/') + if ($proj.databases) { + foreach ($db in $proj.databases) { + if ($db.configSrc -and $db.newObjectPosition) { + $src = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($projDir, $db.configSrc)).TrimEnd('\', '/') + if ($cfgFull -eq $src -or $cfgFull.StartsWith($src + [System.IO.Path]::DirectorySeparatorChar)) { + if ("$($db.newObjectPosition)" -eq "byName") { return "byName" } + return "end" + } + } + } + } + if ("$($proj.newObjectPosition)" -eq "byName") { return "byName" } + return "end" + } catch { return "end" } +} + +# Порядок имён объектов метаданных, как в дереве Конфигуратора. +# Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше +# букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не +# используются — они разные на разных ОС и в разных рантаймах, а так оба порта сравнивают +# одинаково везде. Равные ключи разводит ordinal-сравнение исходных строк. +# Возвращает -1 | 0 | 1. Реестр семьи: tests/skills/check-inline-drift.mjs. +function Compare-MetadataNames([string]$a, [string]$b) { + $keys = @("", "") + $names = @($a, $b) + for ($i = 0; $i -lt 2; $i++) { + $sb = New-Object System.Text.StringBuilder + foreach ($ch in $names[$i].ToLowerInvariant().ToCharArray()) { + if ($ch -eq [char]0x0451) { $ch = [char]0x0435 } + if ([char]::IsDigit($ch)) { [void]$sb.Append('1') } + elseif ([char]::IsLetter($ch)) { [void]$sb.Append('2') } + else { [void]$sb.Append('0') } + [void]$sb.Append($ch) + } + $keys[$i] = $sb.ToString() + } + $r = [string]::CompareOrdinal($keys[0], $keys[1]) + if ($r -eq 0) { $r = [string]::CompareOrdinal($a, $b) } + if ($r -lt 0) { return -1 } + if ($r -gt 0) { return 1 } + return 0 +} + +# Сортировка имён компаратором Compare-MetadataNames. В py-порту ту же роль играет +# functools.cmp_to_key — штатный способ отсортировать компаратором; в PS 5.1 его нет, +# поэтому слияние вручную. Порядок обоих портов задаёт один и тот же компаратор. +function Sort-MetadataNames([string[]]$names) { + # Возврат без запятой-обёртки: приёмная сторона всегда пишет @(...), и одноэлементный + # результат остаётся массивом. С `return ,@(...)` @() собрал бы ОДИН объект-массив. + if ($names.Count -le 1) { return $names } + $mid = [int]($names.Count / 2) + $left = @(Sort-MetadataNames $names[0..($mid - 1)]) + $right = @(Sort-MetadataNames $names[$mid..($names.Count - 1)]) + $out = New-Object System.Collections.ArrayList + $i = 0; $j = 0 + while ($i -lt $left.Count -and $j -lt $right.Count) { + if ((Compare-MetadataNames $left[$i] $right[$j]) -le 0) { [void]$out.Add($left[$i]); $i++ } + else { [void]$out.Add($right[$j]); $j++ } + } + while ($i -lt $left.Count) { [void]$out.Add($left[$i]); $i++ } + while ($j -lt $right.Count) { [void]$out.Add($right[$j]); $j++ } + return $out.ToArray() +} + +# Упорядочить по имени внутри вида. +# Без значения — все виды, кроме Subsystem (порядок подсистем в дереве задаёт порядок +# разделов в панели, пока их не перечислили в ); явно названный вид +# сортируется в любом случае. Взаимный порядок видов не трогаем: платформа приводит его +# к своему при первой же выгрузке. Переставляем ЗНАЧЕНИЯ узлов, а не сами узлы — отступы +# и структура файла остаются как были, меняются только имена в строках. +function Do-SortChildObjects([string]$batchVal) { + if (-not $script:childObjsEl) { Write-Error "No element found"; exit 1 } + + # Ввод прощающий: регистр не важен, принимается и имя каталога (Catalogs → Catalog) — + # в дереве выгрузки виды видны именно во множественном числе. + # Без @(...) на приёме: Parse-BatchValue возвращает ,$items — обёртка, которую @() + # собрал бы как ОДИН объект-массив, и вид не нашёлся бы в $script:typeOrder. + $tokens = @() + if ("$batchVal".Trim()) { $tokens = Parse-BatchValue $batchVal } + $requested = @() + foreach ($token in $tokens) { + $canon = Resolve-TypeName $token + if (-not $canon) { Write-Error "Unknown type '$token'. Valid: $($script:typeOrder -join ', ')"; exit 1 } + $requested += $canon + } + + $groups = New-Object System.Collections.Specialized.OrderedDictionary + foreach ($child in $script:childObjsEl.ChildNodes) { + if ($child.NodeType -ne 'Element') { continue } + $ln = $child.get_LocalName() + if (-not $groups.Contains($ln)) { $groups[$ln] = New-Object System.Collections.ArrayList } + [void]$groups[$ln].Add($child) + } + + $targets = if ($requested.Count -gt 0) { $requested } else { @($groups.Keys | Where-Object { $_ -cne 'Subsystem' }) } + foreach ($typeName in $targets) { + if (-not $groups.Contains($typeName)) { continue } + $els = $groups[$typeName] + if ($els.Count -lt 2) { continue } + $names = @(foreach ($e in $els) { $e.InnerText }) + $ordered = @(Sort-MetadataNames $names) + $same = $true + for ($i = 0; $i -lt $names.Count; $i++) { if ($names[$i] -cne $ordered[$i]) { $same = $false; break } } + if ($same) { continue } + for ($i = 0; $i -lt $els.Count; $i++) { $els[$i].InnerText = $ordered[$i] } + $script:modifyCount++ + Info "Sorted: $typeName ($($els.Count))" + } +} + +# Стиль существующего файла для round-trip-сохранения: BOM / EOL / регистр encoding / +# финальный перенос. $null → файл новый (сохранить текущее поведение). +# Реестр семьи: tests/skills/check-inline-drift.mjs. +function Detect-XmlStyle([string]$path) { + if (-not (Test-Path -LiteralPath $path)) { return $null } + $raw = [System.IO.File]::ReadAllBytes($path) + $bom = ($raw.Length -ge 3 -and $raw[0] -eq 0xEF -and $raw[1] -eq 0xBB -and $raw[2] -eq 0xBF) + $body = if ($bom) { [System.Text.Encoding]::UTF8.GetString($raw, 3, $raw.Length - 3) } else { [System.Text.Encoding]::UTF8.GetString($raw) } + $head = if ($body.Length -gt 200) { $body.Substring(0, 200) } else { $body } + $m = [regex]::Match($head, 'encoding="([^"]+)"') + return @{ + bom = $bom + crlf = $body.Contains("`r`n") + enc = $(if ($m.Success) { $m.Groups[1].Value } else { "utf-8" }) + finalNl = $body.EndsWith("`n") + } +} + +# Привести текст XmlWriter к стилю оригинала; для НОВОГО файла ($null) — к канону выгрузки +# Конфигуратора: encoding="UTF-8", CRLF, без перевода строки в конце. +# Реестр семьи: tests/skills/check-inline-drift.mjs. +function Finalize-XmlText([string]$text, $style) { + if ($text.Length -gt 0 -and $text[0] -eq [char]0xFEFF) { $text = $text.Substring(1) } + $encDecl = $(if ($style) { $style.enc } else { "UTF-8" }) + $text = $text.Replace('encoding="utf-8"', 'encoding="' + $encDecl + '"') + # Пустой элемент: XmlWriter отдаёт ``, Конфигуратор пишет ``. Внутри + # CDATA/комментария ` />` может быть содержимым (там `>` не экранируется), + # поэтому они идут первыми ветками альтернации и возвращаются как есть. + $text = [regex]::Replace($text, '(?s)||(?<=\S) />', { param($m) if ($m.Value -eq ' />') { '/>' } else { $m.Value } }) + $text = ($text -replace "`r`n", "`n").TrimEnd("`n") + if ($style -and $style.finalNl) { $text += "`n" } + if (-not $style -or $style.crlf) { $text = $text -replace "`n", "`r`n" } + return $text +} + function Do-AddChildObject([string]$batchVal) { if (-not $script:childObjsEl) { Write-Error "No element found"; exit 1 } @@ -460,6 +638,8 @@ function Do-AddChildObject([string]$batchVal) { exit 1 } $typeName = $item.Substring(0, $dotIdx) + $canonType = Resolve-TypeName $typeName + if ($canonType) { $typeName = $canonType } $objNameVal = $item.Substring($dotIdx + 1) # Check type is valid @@ -504,11 +684,11 @@ To create a new $typeName, use $hintSkill (auto-registers in Configuration.xml): continue } - # Find insertion point: after last element of same type, or after last element of preceding type + # Место вставки. Вид — по $script:typeOrder; внутри вида — по newObjectPosition. + $byName = ($typeName -cne "Subsystem" -and (Get-NewObjectPosition $script:configDir) -eq "byName") $insertBefore = $null $lastSameType = $null - $lastPrecedingType = $null - $currentTypeIdx = -1 + $firstLaterType = $null foreach ($child in $script:childObjsEl.ChildNodes) { if ($child.NodeType -ne 'Element') { continue } @@ -516,17 +696,29 @@ To create a new $typeName, use $hintSkill (auto-registers in Configuration.xml): if ($childTypeIdx -lt 0) { continue } if ($child.LocalName -eq $typeName) { - # Same type — check alphabetical order - if ($child.InnerText -gt $objNameVal -and -not $insertBefore) { - # Insert before this element (alphabetical) + # Внутри вида — по newObjectPosition: end (по умолчанию) кладёт после последнего + # объекта того же вида, byName — по имени. Subsystem по имени не упорядочиваем + # никогда: порядок подсистем в дереве задаёт порядок разделов в панели. + $lastSameType = $child + if ($byName -and -not $insertBefore -and (Compare-MetadataNames $child.InnerText $objNameVal) -gt 0) { $insertBefore = $child } - $lastSameType = $child - } elseif ($childTypeIdx -lt $typeIdx) { - $lastPrecedingType = $child - } elseif ($childTypeIdx -gt $typeIdx -and -not $insertBefore) { - # First element of a later type — insert before it - $insertBefore = $child + } elseif ($childTypeIdx -gt $typeIdx -and -not $firstLaterType) { + $firstLaterType = $child + } + } + + if (-not $insertBefore) { + # Место не выбрано именем — ставим сразу за последним объектом того же вида, + # то есть перед его следующим соседом. Через $firstLaterType этого не сделать: + # если видов старше в файле нет, запись уехала бы в самый конец блока, + # за пределы своей группы. + if ($lastSameType) { + $next = $lastSameType.NextSibling + while ($next -and $next.NodeType -ne 'Element') { $next = $next.NextSibling } + $insertBefore = $next + } else { + $insertBefore = $firstLaterType } } @@ -558,6 +750,8 @@ function Do-RemoveChildObject([string]$batchVal) { exit 1 } $typeName = $item.Substring(0, $dotIdx) + $canonType = Resolve-TypeName $typeName + if ($canonType) { $typeName = $canonType } $objNameVal = $item.Substring($dotIdx + 1) $found = $false @@ -787,6 +981,29 @@ $script:ruTypeMap = @{ "бот" = "Bot" "планобмена" = "ExchangePlan" "хранилищенастроек" = "SettingsStorage" + # Множественное число: в дереве конфигурации виды подписаны именно так. + "справочники" = "Catalog" + "документы" = "Document" + "перечисления" = "Enum" + "отчёты" = "Report" + "отчеты" = "Report" + "обработки" = "DataProcessor" + "общиеформы" = "CommonForm" + "журналыдокументов" = "DocumentJournal" + "планывидовхарактеристик" = "ChartOfCharacteristicTypes" + "планысчетов" = "ChartOfAccounts" + "планывидоврасчета" = "ChartOfCalculationTypes" + "планывидоврасчёта" = "ChartOfCalculationTypes" + "регистрысведений" = "InformationRegister" + "регистрынакопления" = "AccumulationRegister" + "регистрыбухгалтерии" = "AccountingRegister" + "регистрырасчета" = "CalculationRegister" + "регистрырасчёта" = "CalculationRegister" + "бизнеспроцессы" = "BusinessProcess" + "задачи" = "Task" + "боты" = "Bot" + "планыобмена" = "ExchangePlan" + "хранилищанастроек" = "SettingsStorage" } # plural folder → singular type $script:dirToType = @{} @@ -1028,11 +1245,16 @@ foreach ($op in $operations) { "set-defaultRoles" { Do-SetDefaultRoles $opValueStr } "set-panels" { Do-SetPanels $opValue } "set-home-page" { Do-SetHomePage $opValue } + "sort-childObjects" { Do-SortChildObjects $opValueStr } default { Write-Error "Unknown operation: $opName"; exit 1 } } } # --- Save --- +# Стиль исходника снимаем ДО записи: правка чужого файла наследует его BOM/EOL/заголовок +# (#44/#46/#47), новый файл получает канон выгрузки. Зеркало _detect_xml_style в py-порту. +$xmlStyle = Detect-XmlStyle $resolvedPath + $settings = New-Object System.Xml.XmlWriterSettings $settings.Encoding = New-Object System.Text.UTF8Encoding($true) $settings.Indent = $false @@ -1043,22 +1265,12 @@ $writer = [System.Xml.XmlWriter]::Create($memStream, $settings) $script:xmlDoc.Save($writer) $writer.Flush(); $writer.Close() -$bytes = $memStream.ToArray() +$text = [System.Text.Encoding]::UTF8.GetString($memStream.ToArray()) $memStream.Close() -$text = [System.Text.Encoding]::UTF8.GetString($bytes) -if ($text.Length -gt 0 -and $text[0] -eq [char]0xFEFF) { $text = $text.Substring(1) } -$text = $text.Replace('encoding="utf-8"', 'encoding="UTF-8"') -# Пустой элемент: XmlWriter отдаёт ``, Конфигуратор пишет ``. Внутри -# CDATA/комментария ` />` может быть содержимым (там `>` не экранируется), -# поэтому они идут первыми ветками альтернации и возвращаются как есть. -$text = [regex]::Replace($text, '(?s)||(?<=\S) />', { param($m) if ($m.Value -eq ' />') { '/>' } else { $m.Value } }) -# Целевой перевод строки: стиль файла-назначения — правка наследует его (#44/#46/#47), -# новый файл получает канон выгрузки CRLF. Зеркало _detect_xml_style в py-порту. -$targetEol = if ((Test-Path -LiteralPath $resolvedPath) -and ([System.IO.File]::ReadAllText($resolvedPath) -notmatch "`r`n")) { "`n" } else { "`r`n" } -$text = ($text -replace "`r`n", "`n") -replace "`n", $targetEol +$text = Finalize-XmlText $text $xmlStyle -$utf8Bom = New-Object System.Text.UTF8Encoding($true) -[System.IO.File]::WriteAllText($resolvedPath, $text, $utf8Bom) +$writeBom = ($null -eq $xmlStyle) -or $xmlStyle.bom +[System.IO.File]::WriteAllText($resolvedPath, $text, (New-Object System.Text.UTF8Encoding($writeBom))) Info "Saved: $resolvedPath" # --- Auto-validate --- diff --git a/.claude/skills/cf-edit/scripts/cf-edit.py b/.claude/skills/cf-edit/scripts/cf-edit.py index 9f4717672..5a8d7d926 100644 --- a/.claude/skills/cf-edit/scripts/cf-edit.py +++ b/.claude/skills/cf-edit/scripts/cf-edit.py @@ -1,8 +1,9 @@ #!/usr/bin/env python3 -# cf-edit v1.23 — Edit 1C configuration root (Configuration.xml) +# cf-edit v1.24 — Edit 1C configuration root (Configuration.xml) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse +import functools import json import os import re @@ -353,6 +354,122 @@ SCALAR_PROPS = ["Name", "Version", "Vendor", "Comment", "NamePrefix", "UpdateCat REF_PROPS = ["DefaultLanguage"] +def get_new_object_position(cfg_dir): + """Куда навык ставит новую запись в — настройка newObjectPosition. + + databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML, + иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида + (так дописывает Конфигуратор); byName — по имени среди объектов того же вида. + Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard: + настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда + оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный. + configSrc считается от каталога .v8-project.json, как задокументировано в + docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + try: + pj = _sg_find_v8project(os.path.abspath(cfg_dir or ".")) or _sg_find_v8project(os.getcwd()) + if not pj: + return "end" + proj = json.loads(open(pj, encoding="utf-8-sig").read()) + proj_dir = os.path.dirname(pj) + cfg_full = os.path.normcase(os.path.abspath(cfg_dir or ".")).rstrip("\\/") + for db in proj.get("databases", []): + src = db.get("configSrc") + if src and db.get("newObjectPosition"): + src_full = os.path.normcase(os.path.abspath(os.path.join(proj_dir, src))).rstrip("\\/") + if cfg_full == src_full or cfg_full.startswith(src_full + os.sep): + return "byName" if str(db["newObjectPosition"]).lower() == "byname" else "end" + if str(proj.get("newObjectPosition") or "").lower() == "byname": + return "byName" + return "end" + except Exception: + return "end" + + +def compare_metadata_names(a, b): + """Порядок имён объектов метаданных, как в дереве Конфигуратора. + + Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше + букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не + используются — они разные на разных ОС и в разных рантаймах, а так оба порта сравнивают + одинаково везде. Равные ключи разводит ordinal-сравнение исходных строк. + Возвращает -1 | 0 | 1. Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + keys = [] + for name in (a, b): + parts = [] + for ch in name.lower(): + if ch == "ё": + ch = "е" + if ch.isdigit(): + parts.append("1" + ch) + elif ch.isalpha(): + parts.append("2" + ch) + else: + parts.append("0" + ch) + keys.append("".join(parts)) + if keys[0] != keys[1]: + return -1 if keys[0] < keys[1] else 1 + if a != b: + return -1 if a < b else 1 + return 0 + + +RU_TYPE_MAP = { + "справочник": "Catalog", "документ": "Document", "перечисление": "Enum", + "отчёт": "Report", "отчет": "Report", "обработка": "DataProcessor", + "общаяформа": "CommonForm", "журналдокументов": "DocumentJournal", + "планвидовхарактеристик": "ChartOfCharacteristicTypes", + "плансчетов": "ChartOfAccounts", + "планвидоврасчета": "ChartOfCalculationTypes", + "планвидоврасчёта": "ChartOfCalculationTypes", + "регистрсведений": "InformationRegister", + "регистрнакопления": "AccumulationRegister", + "регистрбухгалтерии": "AccountingRegister", + "регистррасчета": "CalculationRegister", + "регистррасчёта": "CalculationRegister", + "бизнеспроцесс": "BusinessProcess", + "бот": "Bot", + "задача": "Task", "планобмена": "ExchangePlan", + "хранилищенастроек": "SettingsStorage", + # Множественное число: в дереве конфигурации виды подписаны именно так. + "справочники": "Catalog", "документы": "Document", "перечисления": "Enum", + "отчёты": "Report", "отчеты": "Report", "обработки": "DataProcessor", + "общиеформы": "CommonForm", "журналыдокументов": "DocumentJournal", + "планывидовхарактеристик": "ChartOfCharacteristicTypes", + "планысчетов": "ChartOfAccounts", + "планывидоврасчета": "ChartOfCalculationTypes", + "планывидоврасчёта": "ChartOfCalculationTypes", + "регистрысведений": "InformationRegister", + "регистрынакопления": "AccumulationRegister", + "регистрыбухгалтерии": "AccountingRegister", + "регистррасчета": "CalculationRegister", "регистрырасчета": "CalculationRegister", + "регистрырасчёта": "CalculationRegister", + "бизнеспроцессы": "BusinessProcess", + "боты": "Bot", + "задачи": "Task", "планыобмена": "ExchangePlan", + "хранилищанастроек": "SettingsStorage", +} + + +def resolve_type_name(token): + """Имя вида из пользовательского ввода → каноническое имя или None. + + Ввод прощающий: регистр не важен, принимается имя каталога выгрузки + (Catalogs → Catalog) и русское имя вида в единственном и множественном числе. + """ + key = (token or "").strip().lower() + if not key: + return None + for canon in TYPE_ORDER: + if canon.lower() == key: + return canon + for canon, dir_name in TYPE_TO_DIR.items(): + if dir_name.lower() == key: + return canon + return RU_TYPE_MAP.get(key) + + def localname(el): return etree.QName(el.tag).localname @@ -498,7 +615,7 @@ def main(): parser = argparse.ArgumentParser(description="Edit 1C configuration root (Configuration.xml)", allow_abbrev=False) parser.add_argument("-ConfigPath", "-Path", required=True) parser.add_argument("-DefinitionFile", default=None) - parser.add_argument("-Operation", default=None, choices=["modify-property", "add-childObject", "remove-childObject", "add-defaultRole", "remove-defaultRole", "set-defaultRoles", "set-panels", "set-home-page"]) + parser.add_argument("-Operation", default=None, choices=["modify-property", "add-childObject", "remove-childObject", "add-defaultRole", "remove-defaultRole", "set-defaultRoles", "set-panels", "set-home-page", "sort-childObjects"]) parser.add_argument("-Value", default=None) parser.add_argument("-NoValidate", action="store_true") args = ci_parse_args(parser) @@ -637,7 +754,7 @@ def main(): if dot_idx < 1: print(f"Invalid format '{item}', expected 'Type.Name'", file=sys.stderr) sys.exit(1) - type_name = item[:dot_idx] + type_name = resolve_type_name(item[:dot_idx]) or item[:dot_idx] obj_name_val = item[dot_idx + 1:] if type_name not in TYPE_ORDER: @@ -674,8 +791,15 @@ def main(): warn(f"Already exists: {type_name}.{obj_name_val}") continue - # Find insertion point + # Место вставки. Вид — по TYPE_ORDER; внутри вида — по newObjectPosition: + # end (по умолчанию) кладёт после последнего объекта того же вида, byName — по имени. + # Subsystem по имени не упорядочиваем никогда: порядок подсистем в дереве задаёт + # порядок разделов в панели, пока их не перечислили в . + by_name = (type_name != "Subsystem" + and get_new_object_position(config_dir) == "byName") insert_before = None + last_same = None + first_later = None for child in child_objs_el: if not isinstance(child.tag, str): continue @@ -685,10 +809,24 @@ def main(): child_type_idx = TYPE_ORDER.index(child_type_name) if child_type_name == type_name: - if (child.text or "") > obj_name_val and insert_before is None: + last_same = child + if (by_name and insert_before is None + and compare_metadata_names(child.text or "", obj_name_val) > 0): insert_before = child - elif child_type_idx > type_idx and insert_before is None: - insert_before = child + elif child_type_idx > type_idx and first_later is None: + first_later = child + + if insert_before is None: + # Место не выбрано именем — ставим сразу за последним объектом того же вида, + # то есть перед его следующим соседом. Через first_later этого не сделать: + # если видов старше в файле нет, запись уехала бы в самый конец блока, + # за пределы своей группы. + if last_same is not None: + siblings = [c for c in child_objs_el if isinstance(c.tag, str)] + pos = siblings.index(last_same) + insert_before = siblings[pos + 1] if pos + 1 < len(siblings) else None + else: + insert_before = first_later new_el = etree.Element(f"{{{MD_NS}}}{type_name}") new_el.text = obj_name_val @@ -701,6 +839,48 @@ def main(): add_count += 1 info(f"Added: {type_name}.{obj_name_val}") + def do_sort_child_objects(batch_val): + """Упорядочить по имени внутри вида. + + Без значения — все виды, кроме Subsystem (порядок подсистем в дереве задаёт порядок + разделов в панели, пока их не перечислили в ); явно названный вид + сортируется в любом случае. Взаимный порядок видов не трогаем: платформа приводит его + к своему при первой же выгрузке. Переставляем ЗНАЧЕНИЯ узлов, а не сами узлы — + отступы и структура файла остаются как были, меняются только имена в строках. + """ + nonlocal modify_count + if child_objs_el is None: + print("No element found", file=sys.stderr) + sys.exit(1) + + requested = [] + for token in (parse_batch_value(batch_val) if str(batch_val or "").strip() else []): + canon = resolve_type_name(token) + if canon is None: + print(f"Unknown type '{token}'. Valid: {', '.join(TYPE_ORDER)}", file=sys.stderr) + sys.exit(1) + requested.append(canon) + + groups = {} + for child in child_objs_el: + if not isinstance(child.tag, str): + continue + groups.setdefault(localname(child), []).append(child) + + targets = requested or [t for t in groups if t != "Subsystem"] + for type_name in targets: + els = groups.get(type_name, []) + if len(els) < 2: + continue + names = [e.text or "" for e in els] + ordered = sorted(names, key=functools.cmp_to_key(compare_metadata_names)) + if names == ordered: + continue + for el, name in zip(els, ordered): + el.text = name + modify_count += 1 + info(f"Sorted: {type_name} ({len(els)})") + def do_remove_child_object(batch_val): nonlocal remove_count if child_objs_el is None: @@ -713,7 +893,7 @@ def main(): if dot_idx < 1: print(f"Invalid format '{item}', expected 'Type.Name'", file=sys.stderr) sys.exit(1) - type_name = item[:dot_idx] + type_name = resolve_type_name(item[:dot_idx]) or item[:dot_idx] obj_name_val = item[dot_idx + 1:] found = False @@ -933,24 +1113,6 @@ def main(): info(f"Wrote panel layout: {cai_path}") # --- set-home-page (writes Ext/HomePageWorkArea.xml from scratch) --- - RU_TYPE_MAP = { - "справочник": "Catalog", "документ": "Document", "перечисление": "Enum", - "отчёт": "Report", "отчет": "Report", "обработка": "DataProcessor", - "общаяформа": "CommonForm", "журналдокументов": "DocumentJournal", - "планвидовхарактеристик": "ChartOfCharacteristicTypes", - "плансчетов": "ChartOfAccounts", - "планвидоврасчета": "ChartOfCalculationTypes", - "планвидоврасчёта": "ChartOfCalculationTypes", - "регистрсведений": "InformationRegister", - "регистрнакопления": "AccumulationRegister", - "регистрбухгалтерии": "AccountingRegister", - "регистррасчета": "CalculationRegister", - "регистррасчёта": "CalculationRegister", - "бизнеспроцесс": "BusinessProcess", - "бот": "Bot", - "задача": "Task", "планобмена": "ExchangePlan", - "хранилищенастроек": "SettingsStorage", - } DIR_TO_TYPE = {v.lower(): k for k, v in TYPE_TO_DIR.items()} UUID_RE = __import__("re").compile(r"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") @@ -1130,6 +1292,8 @@ def main(): do_set_panels(op_value) elif op_key == "set-home-page": do_set_home_page(op_value) + elif op_key == "sort-childobjects": + do_sort_child_objects(op_value if isinstance(op_value, str) else str(op_value)) else: print(f"Unknown operation: {op_name}", file=sys.stderr) sys.exit(1) diff --git a/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 b/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 index 53c6dd4f9..0b4b98979 100644 --- a/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 +++ b/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 @@ -1,4 +1,4 @@ -# cfe-borrow v1.33 — Borrow objects from configuration into extension (CFE) +# cfe-borrow v1.34 — Borrow objects from configuration into extension (CFE) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills [CmdletBinding(PositionalBinding=$false)] param( @@ -1347,32 +1347,22 @@ function Register-FormInObject { } # Save object XML + # Стиль исходника снимаем ДО записи: правка чужого файла наследует его BOM/EOL/заголовок + # (#44/#46/#47), новый файл получает канон выгрузки. Зеркало _detect_xml_style в py-порту. + $style2 = Detect-XmlStyle $objFile $settings2 = New-Object System.Xml.XmlWriterSettings $settings2.Encoding = New-Object System.Text.UTF8Encoding($true) $settings2.Indent = $false $settings2.NewLineHandling = [System.Xml.NewLineHandling]::None - $memStream2 = New-Object System.IO.MemoryStream $writer2 = [System.Xml.XmlWriter]::Create($memStream2, $settings2) $objDoc.Save($writer2) $writer2.Flush(); $writer2.Close() - - $bytes2 = $memStream2.ToArray() + $text2 = [System.Text.Encoding]::UTF8.GetString($memStream2.ToArray()) $memStream2.Close() - $text2 = [System.Text.Encoding]::UTF8.GetString($bytes2) - if ($text2.Length -gt 0 -and $text2[0] -eq [char]0xFEFF) { $text2 = $text2.Substring(1) } - $text2 = $text2.Replace('encoding="utf-8"', 'encoding="UTF-8"') - # Пустой элемент: XmlWriter отдаёт ``, Конфигуратор пишет ``. Внутри - # CDATA/комментария ` />` может быть содержимым (там `>` не экранируется), - # поэтому они идут первыми ветками альтернации и возвращаются как есть. - $text2 = [regex]::Replace($text2, '(?s)||(?<=\S) />', { param($m) if ($m.Value -eq ' />') { '/>' } else { $m.Value } }) - - $utf8Bom2 = New-Object System.Text.UTF8Encoding($true) - # Целевой перевод строки: стиль файла-назначения — правка наследует его (#44/#46/#47), - # новый файл получает канон выгрузки CRLF. Зеркало _detect_xml_style в py-порту. - $targetEol = if ((Test-Path -LiteralPath $objFile) -and ([System.IO.File]::ReadAllText($objFile) -notmatch "`r`n")) { "`n" } else { "`r`n" } - $text2 = ($text2 -replace "`r`n", "`n") -replace "`n", $targetEol - [System.IO.File]::WriteAllText($objFile, $text2, $utf8Bom2) + $text2 = Finalize-XmlText $text2 $style2 + $writeBom2 = ($null -eq $style2) -or $style2.bom + [System.IO.File]::WriteAllText($objFile, $text2, (New-Object System.Text.UTF8Encoding($writeBom2))) Info " Registered form in: $objFile" } @@ -1885,6 +1875,9 @@ function Merge-AttributesIntoObject { } # Save via text manipulation to avoid namespace issues with InnerXml + # Стиль исходника снимаем ДО записи: правка чужого файла наследует его BOM/EOL/заголовок + # (#44/#46/#47), новый файл получает канон выгрузки. Зеркало _detect_xml_style в py-порту. + $style3 = Detect-XmlStyle $objFile $settings3 = New-Object System.Xml.XmlWriterSettings $settings3.Encoding = New-Object System.Text.UTF8Encoding($true) $settings3.Indent = $false @@ -1893,28 +1886,15 @@ function Merge-AttributesIntoObject { $writer3 = [System.Xml.XmlWriter]::Create($memStream3, $settings3) $objDoc.Save($writer3) $writer3.Flush(); $writer3.Close() - $bytes3 = $memStream3.ToArray() + $text3 = [System.Text.Encoding]::UTF8.GetString($memStream3.ToArray()) $memStream3.Close() - $text3 = [System.Text.Encoding]::UTF8.GetString($bytes3) - if ($text3.Length -gt 0 -and $text3[0] -eq [char]0xFEFF) { $text3 = $text3.Substring(1) } - $text3 = $text3.Replace('encoding="utf-8"', 'encoding="UTF-8"') - # Самозакрытый элемент раскрывается текстом, а не пробельным узлом в DOM: тот давал # лишнюю строку с табуляцией перед первым (у Конфигуратора пустых строк нет). + # Стоит ДО Finalize-XmlText, чтобы схлопывание пустых тегов накрыло и вставленные реквизиты. $text3 = Insert-IntoOwnChildObjects $text3 $allAttrXml - - # Пустой элемент: XmlWriter отдаёт ``, Конфигуратор пишет ``. Внутри - # CDATA/комментария ` />` может быть содержимым (там `>` не экранируется), - # поэтому они идут первыми ветками альтернации и возвращаются как есть. - # Стоит ПОСЛЕ вставки реквизитов, чтобы накрыть и их. - $text3 = [regex]::Replace($text3, '(?s)||(?<=\S) />', { param($m) if ($m.Value -eq ' />') { '/>' } else { $m.Value } }) - - $utf8Bom3 = New-Object System.Text.UTF8Encoding($true) - # Целевой перевод строки: стиль файла-назначения — правка наследует его (#44/#46/#47), - # новый файл получает канон выгрузки CRLF. Зеркало _detect_xml_style в py-порту. - $targetEol = if ((Test-Path -LiteralPath $objFile) -and ([System.IO.File]::ReadAllText($objFile) -notmatch "`r`n")) { "`n" } else { "`r`n" } - $text3 = ($text3 -replace "`r`n", "`n") -replace "`n", $targetEol - [System.IO.File]::WriteAllText($objFile, $text3, $utf8Bom3) + $text3 = Finalize-XmlText $text3 $style3 + $writeBom3 = ($null -eq $style3) -or $style3.bom + [System.IO.File]::WriteAllText($objFile, $text3, (New-Object System.Text.UTF8Encoding($writeBom3))) Info " Merged $added attribute(s) into: $objFile" } } @@ -2230,6 +2210,114 @@ function Build-BorrowedObjectXml { } # --- 13. Helper: add object to extension ChildObjects --- +# Стиль существующего файла для round-trip-сохранения: BOM / EOL / регистр encoding / +# финальный перенос. $null → файл новый (сохранить текущее поведение). +# Реестр семьи: tests/skills/check-inline-drift.mjs. +function Detect-XmlStyle([string]$path) { + if (-not (Test-Path -LiteralPath $path)) { return $null } + $raw = [System.IO.File]::ReadAllBytes($path) + $bom = ($raw.Length -ge 3 -and $raw[0] -eq 0xEF -and $raw[1] -eq 0xBB -and $raw[2] -eq 0xBF) + $body = if ($bom) { [System.Text.Encoding]::UTF8.GetString($raw, 3, $raw.Length - 3) } else { [System.Text.Encoding]::UTF8.GetString($raw) } + $head = if ($body.Length -gt 200) { $body.Substring(0, 200) } else { $body } + $m = [regex]::Match($head, 'encoding="([^"]+)"') + return @{ + bom = $bom + crlf = $body.Contains("`r`n") + enc = $(if ($m.Success) { $m.Groups[1].Value } else { "utf-8" }) + finalNl = $body.EndsWith("`n") + } +} + +# Привести текст XmlWriter к стилю оригинала; для НОВОГО файла ($null) — к канону выгрузки +# Конфигуратора: encoding="UTF-8", CRLF, без перевода строки в конце. +# Реестр семьи: tests/skills/check-inline-drift.mjs. +function Finalize-XmlText([string]$text, $style) { + if ($text.Length -gt 0 -and $text[0] -eq [char]0xFEFF) { $text = $text.Substring(1) } + $encDecl = $(if ($style) { $style.enc } else { "UTF-8" }) + $text = $text.Replace('encoding="utf-8"', 'encoding="' + $encDecl + '"') + # Пустой элемент: XmlWriter отдаёт ``, Конфигуратор пишет ``. Внутри + # CDATA/комментария ` />` может быть содержимым (там `>` не экранируется), + # поэтому они идут первыми ветками альтернации и возвращаются как есть. + $text = [regex]::Replace($text, '(?s)||(?<=\S) />', { param($m) if ($m.Value -eq ' />') { '/>' } else { $m.Value } }) + $text = ($text -replace "`r`n", "`n").TrimEnd("`n") + if ($style -and $style.finalNl) { $text += "`n" } + if (-not $style -or $style.crlf) { $text = $text -replace "`n", "`r`n" } + return $text +} + +function Find-V8Project([string]$startDir) { + $d = $startDir + for ($i = 0; $i -lt 20 -and $d; $i++) { + $pj = Join-Path $d ".v8-project.json" + if (Test-Path $pj) { return $pj } + $parent = [System.IO.Path]::GetDirectoryName($d) + if ($parent -eq $d) { break } + $d = $parent + } + return $null +} + +# Куда навык ставит новую запись в — настройка newObjectPosition. +# databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML, +# иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида +# (так дописывает Конфигуратор); byName — по имени среди объектов того же вида. +# Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard: +# настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда +# оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный. +# configSrc считается от каталога .v8-project.json, как задокументировано в +# docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs. +function Get-NewObjectPosition([string]$cfgDir) { + try { + if (-not $cfgDir) { $cfgDir = "." } + $pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir)) + if (-not $pj) { $pj = Find-V8Project (Get-Location).Path } + if (-not $pj) { return "end" } + $proj = Get-Content -Raw $pj | ConvertFrom-Json + $projDir = [System.IO.Path]::GetDirectoryName($pj) + $cfgFull = [System.IO.Path]::GetFullPath($cfgDir).TrimEnd('\', '/') + if ($proj.databases) { + foreach ($db in $proj.databases) { + if ($db.configSrc -and $db.newObjectPosition) { + $src = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($projDir, $db.configSrc)).TrimEnd('\', '/') + if ($cfgFull -eq $src -or $cfgFull.StartsWith($src + [System.IO.Path]::DirectorySeparatorChar)) { + if ("$($db.newObjectPosition)" -eq "byName") { return "byName" } + return "end" + } + } + } + } + if ("$($proj.newObjectPosition)" -eq "byName") { return "byName" } + return "end" + } catch { return "end" } +} + +# Порядок имён объектов метаданных, как в дереве Конфигуратора. +# Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше +# букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не +# используются — они разные на разных ОС и в разных рантаймах, а так оба порта сравнивают +# одинаково везде. Равные ключи разводит ordinal-сравнение исходных строк. +# Возвращает -1 | 0 | 1. Реестр семьи: tests/skills/check-inline-drift.mjs. +function Compare-MetadataNames([string]$a, [string]$b) { + $keys = @("", "") + $names = @($a, $b) + for ($i = 0; $i -lt 2; $i++) { + $sb = New-Object System.Text.StringBuilder + foreach ($ch in $names[$i].ToLowerInvariant().ToCharArray()) { + if ($ch -eq [char]0x0451) { $ch = [char]0x0435 } + if ([char]::IsDigit($ch)) { [void]$sb.Append('1') } + elseif ([char]::IsLetter($ch)) { [void]$sb.Append('2') } + else { [void]$sb.Append('0') } + [void]$sb.Append($ch) + } + $keys[$i] = $sb.ToString() + } + $r = [string]::CompareOrdinal($keys[0], $keys[1]) + if ($r -eq 0) { $r = [string]::CompareOrdinal($a, $b) } + if ($r -lt 0) { return -1 } + if ($r -gt 0) { return 1 } + return 0 +} + function Add-ToChildObjects { param([string]$typeName, [string]$objName) @@ -2255,7 +2343,12 @@ function Add-ToChildObjects { } } - # Find insertion point: after last element of same type, or before first element of later type + # Место вставки. Вид — по $script:typeOrder; внутри вида — по newObjectPosition: end + # (по умолчанию) кладёт после последнего объекта того же вида, byName — по имени. Так же + # заимствует Конфигуратор: в боевых выгрузках расширений ChildObjects не отсортирован. + # Subsystem по имени не упорядочиваем никогда: порядок подсистем в дереве задаёт порядок + # разделов в панели. + $byName = ($typeName -cne "Subsystem" -and (Get-NewObjectPosition $extDir) -eq "byName") $insertBefore = $null $lastSameType = $null @@ -2265,8 +2358,7 @@ function Add-ToChildObjects { if ($childTypeIdx -lt 0) { continue } if ($child.LocalName -eq $typeName) { - # Same type -- check alphabetical order - if ($child.InnerText -gt $objName -and -not $insertBefore) { + if ($byName -and -not $insertBefore -and (Compare-MetadataNames $child.InnerText $objName) -gt 0) { $insertBefore = $child } $lastSameType = $child @@ -2439,32 +2531,22 @@ while ($true) { } # --- 15. Save modified Configuration.xml --- +# Стиль исходника снимаем ДО записи: правка чужого файла наследует его BOM/EOL/заголовок +# (#44/#46/#47), новый файл получает канон выгрузки. Зеркало _detect_xml_style в py-порту. +$style = Detect-XmlStyle $extResolvedPath $settings = New-Object System.Xml.XmlWriterSettings $settings.Encoding = New-Object System.Text.UTF8Encoding($true) $settings.Indent = $false $settings.NewLineHandling = [System.Xml.NewLineHandling]::None - $memStream = New-Object System.IO.MemoryStream $writer = [System.Xml.XmlWriter]::Create($memStream, $settings) $script:xmlDoc.Save($writer) $writer.Flush(); $writer.Close() - -$bytes = $memStream.ToArray() +$text = [System.Text.Encoding]::UTF8.GetString($memStream.ToArray()) $memStream.Close() -$text = [System.Text.Encoding]::UTF8.GetString($bytes) -if ($text.Length -gt 0 -and $text[0] -eq [char]0xFEFF) { $text = $text.Substring(1) } -$text = $text.Replace('encoding="utf-8"', 'encoding="UTF-8"') -# Пустой элемент: XmlWriter отдаёт ``, Конфигуратор пишет ``. Внутри -# CDATA/комментария ` />` может быть содержимым (там `>` не экранируется), -# поэтому они идут первыми ветками альтернации и возвращаются как есть. -$text = [regex]::Replace($text, '(?s)||(?<=\S) />', { param($m) if ($m.Value -eq ' />') { '/>' } else { $m.Value } }) - -$utf8Bom = New-Object System.Text.UTF8Encoding($true) -# Целевой перевод строки: стиль файла-назначения — правка наследует его (#44/#46/#47), -# новый файл получает канон выгрузки CRLF. Зеркало _detect_xml_style в py-порту. -$targetEol = if ((Test-Path -LiteralPath $extResolvedPath) -and ([System.IO.File]::ReadAllText($extResolvedPath) -notmatch "`r`n")) { "`n" } else { "`r`n" } -$text = ($text -replace "`r`n", "`n") -replace "`n", $targetEol -[System.IO.File]::WriteAllText($extResolvedPath, $text, $utf8Bom) +$text = Finalize-XmlText $text $style +$writeBom = ($null -eq $style) -or $style.bom +[System.IO.File]::WriteAllText($extResolvedPath, $text, (New-Object System.Text.UTF8Encoding($writeBom))) Info "Saved: $extResolvedPath" # --- 16. Summary --- diff --git a/.claude/skills/cfe-borrow/scripts/cfe-borrow.py b/.claude/skills/cfe-borrow/scripts/cfe-borrow.py index ffd15819c..3d51bba13 100644 --- a/.claude/skills/cfe-borrow/scripts/cfe-borrow.py +++ b/.claude/skills/cfe-borrow/scripts/cfe-borrow.py @@ -1,8 +1,9 @@ #!/usr/bin/env python3 -# cfe-borrow v1.33 — Borrow objects from configuration into extension (CFE) +# cfe-borrow v1.34 — Borrow objects from configuration into extension (CFE) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse +import json import os import re import sys @@ -202,6 +203,82 @@ def decode_numeric_entities(s): return s +def _sg_find_v8project(start_dir): + d = start_dir + for _ in range(20): + if not d: + break + pj = os.path.join(d, ".v8-project.json") + if os.path.isfile(pj): + return pj + parent = os.path.dirname(d) + if parent == d: + break + d = parent + return None + + +def get_new_object_position(cfg_dir): + """Куда навык ставит новую запись в — настройка newObjectPosition. + + databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML, + иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида + (так дописывает Конфигуратор); byName — по имени среди объектов того же вида. + Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard: + настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда + оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный. + configSrc считается от каталога .v8-project.json, как задокументировано в + docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + try: + pj = _sg_find_v8project(os.path.abspath(cfg_dir or ".")) or _sg_find_v8project(os.getcwd()) + if not pj: + return "end" + proj = json.loads(open(pj, encoding="utf-8-sig").read()) + proj_dir = os.path.dirname(pj) + cfg_full = os.path.normcase(os.path.abspath(cfg_dir or ".")).rstrip("\\/") + for db in proj.get("databases", []): + src = db.get("configSrc") + if src and db.get("newObjectPosition"): + src_full = os.path.normcase(os.path.abspath(os.path.join(proj_dir, src))).rstrip("\\/") + if cfg_full == src_full or cfg_full.startswith(src_full + os.sep): + return "byName" if str(db["newObjectPosition"]).lower() == "byname" else "end" + if str(proj.get("newObjectPosition") or "").lower() == "byname": + return "byName" + return "end" + except Exception: + return "end" + + +def compare_metadata_names(a, b): + """Порядок имён объектов метаданных, как в дереве Конфигуратора. + + Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше + букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не + используются — они разные на разных ОС и в разных рантаймах, а так оба порта сравнивают + одинаково везде. Равные ключи разводит ordinal-сравнение исходных строк. + Возвращает -1 | 0 | 1. Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + keys = [] + for name in (a, b): + parts = [] + for ch in name.lower(): + if ch == "ё": + ch = "е" + if ch.isdigit(): + parts.append("1" + ch) + elif ch.isalpha(): + parts.append("2" + ch) + else: + parts.append("0" + ch) + keys.append("".join(parts)) + if keys[0] != keys[1]: + return -1 if keys[0] < keys[1] else 1 + if a != b: + return -1 if a < b else 1 + return 0 + + def localname(el): return etree.QName(el.tag).localname @@ -1035,6 +1112,13 @@ def main(): warn(f"Already in ChildObjects: {type_name}.{obj_name}") return + # Место вставки. Вид — по TYPE_ORDER; внутри вида — по newObjectPosition: + # end (по умолчанию) кладёт после последнего объекта того же вида, byName — по имени. + # Так же, как заимствует Конфигуратор: в боевых выгрузках расширений ChildObjects + # не отсортирован. Subsystem по имени не упорядочиваем никогда: порядок подсистем + # в дереве задаёт порядок разделов в панели. + by_name = (type_name != "Subsystem" + and get_new_object_position(ext_dir) == "byName") insert_before = None for child in child_objs_el: if not isinstance(child.tag, str): @@ -1045,7 +1129,8 @@ def main(): child_type_idx = TYPE_ORDER.index(child_type_name) if child_type_name == type_name: - if (child.text or "") > obj_name and insert_before is None: + if (by_name and insert_before is None + and compare_metadata_names(child.text or "", obj_name) > 0): insert_before = child elif child_type_idx > type_idx and insert_before is None: insert_before = child diff --git a/.claude/skills/db-list/SKILL.md b/.claude/skills/db-list/SKILL.md index 25fae91ad..4c6741739 100644 --- a/.claude/skills/db-list/SKILL.md +++ b/.claude/skills/db-list/SKILL.md @@ -76,6 +76,7 @@ allowed-tools: | `v8path` | string | Каталог bin платформы 1С. Необязательный — если не задан, автоопределение | | `v8args` | array | Доп. аргументы запуска `1cv8.exe` для всех навыков, напр. `["/UseHwLicenses+"]` | | `ibcmdargs` | array | Доп. аргументы `ibcmd` (форма `--ключ=значение`) | +| `newObjectPosition` | `"end"` / `"byName"` | Куда попадает новый объект в составе конфигурации: в конец своего вида (по умолчанию) или на место по имени. Переопределяется в `databases[]` | | `databases` | array | Массив баз данных | | `default` | string | id базы по умолчанию | diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index 542d7071e..b9b08c225 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.ps1 +++ b/.claude/skills/meta-compile/scripts/meta-compile.ps1 @@ -1,4 +1,4 @@ -# meta-compile v1.99 — Compile 1C metadata object from JSON +# meta-compile v1.100 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills [CmdletBinding(PositionalBinding=$false)] param( @@ -5234,8 +5234,69 @@ if ($commands -and $commands.Count -gt 0) { # --- 17. Register in Configuration.xml --- +# Куда навык ставит новую запись в — настройка newObjectPosition. +# databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML, +# иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида +# (так дописывает Конфигуратор); byName — по имени среди объектов того же вида. +# Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard: +# настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда +# оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный. +# configSrc считается от каталога .v8-project.json, как задокументировано в +# docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs. +function Get-NewObjectPosition([string]$cfgDir) { + try { + if (-not $cfgDir) { $cfgDir = "." } + $pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir)) + if (-not $pj) { $pj = Find-V8Project (Get-Location).Path } + if (-not $pj) { return "end" } + $proj = Get-Content -Raw $pj | ConvertFrom-Json + $projDir = [System.IO.Path]::GetDirectoryName($pj) + $cfgFull = [System.IO.Path]::GetFullPath($cfgDir).TrimEnd('\', '/') + if ($proj.databases) { + foreach ($db in $proj.databases) { + if ($db.configSrc -and $db.newObjectPosition) { + $src = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($projDir, $db.configSrc)).TrimEnd('\', '/') + if ($cfgFull -eq $src -or $cfgFull.StartsWith($src + [System.IO.Path]::DirectorySeparatorChar)) { + if ("$($db.newObjectPosition)" -eq "byName") { return "byName" } + return "end" + } + } + } + } + if ("$($proj.newObjectPosition)" -eq "byName") { return "byName" } + return "end" + } catch { return "end" } +} + +# Порядок имён объектов метаданных, как в дереве Конфигуратора. +# Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше +# букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не +# используются — они разные на разных ОС и в разных рантаймах, а так оба порта сравнивают +# одинаково везде. Равные ключи разводит ordinal-сравнение исходных строк. +# Возвращает -1 | 0 | 1. Реестр семьи: tests/skills/check-inline-drift.mjs. +function Compare-MetadataNames([string]$a, [string]$b) { + $keys = @("", "") + $names = @($a, $b) + for ($i = 0; $i -lt 2; $i++) { + $sb = New-Object System.Text.StringBuilder + foreach ($ch in $names[$i].ToLowerInvariant().ToCharArray()) { + if ($ch -eq [char]0x0451) { $ch = [char]0x0435 } + if ([char]::IsDigit($ch)) { [void]$sb.Append('1') } + elseif ([char]::IsLetter($ch)) { [void]$sb.Append('2') } + else { [void]$sb.Append('0') } + [void]$sb.Append($ch) + } + $keys[$i] = $sb.ToString() + } + $r = [string]::CompareOrdinal($keys[0], $keys[1]) + if ($r -eq 0) { $r = [string]::CompareOrdinal($a, $b) } + if ($r -lt 0) { return -1 } + if ($r -gt 0) { return 1 } + return 0 +} + # Регистрация объекта в родительского XML. Общая реализация: эталон — -# meta-compile, копия — role-compile. Реестр семьи: tests/skills/check-inline-drift.mjs. +# meta-compile, копии — role-compile, xdto-compile. Реестр семьи: tests/skills/check-inline-drift.mjs. # Возвращает исход: added | already | no-childobj | no-config. function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [string]$ChildTag, [string]$ChildName) { if (-not (Test-Path $ParentXmlPath)) { return "no-config" } @@ -5255,56 +5316,56 @@ function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [st if ($e.InnerText -eq $ChildName) { return "already" } } - $newElem = $doc.CreateElement($ChildTag, "http://v8.1c.ru/8.3/MDClasses") - $newElem.InnerText = $ChildName + # Правка по сырому тексту, зеркально py-порту: сериализация DOM переписала бы файл целиком + # (регистр encoding, `` вместо ``), а текстовая вставка хранит его байт-в-байт — + # дельта ровно в одну строку. Правим чужой файл, значит наследуем его стиль (#44/#46/#47). + # DOM выше — только на чтение: найти ChildObjects и отсечь дубликат. + $configContent = [System.IO.File]::ReadAllText($ParentXmlPath, (New-Object System.Text.UTF8Encoding($false))) + $eol = if ($configContent.Contains("`r`n")) { "`r`n" } else { "`n" } + $entry = "<$ChildTag>$(Esc-XmlText $ChildName)" + $enc = New-Object System.Text.UTF8Encoding($true) - if ($existing.Count -gt 0) { - # Insert after last existing element of same type - $lastElem = $existing[$existing.Count - 1] - $newWs = $doc.CreateWhitespace("`n`t`t`t") - $childObjects.InsertAfter($newWs, $lastElem) | Out-Null - $childObjects.InsertAfter($newElem, $newWs) | Out-Null - } else { - # No existing elements of this type — insert before closing whitespace. - # Самозакрытый попадает сюда же: LastChild пуст, идёт ветка AppendChild. - $lastChild = $childObjects.LastChild - if ($lastChild.NodeType -eq [System.Xml.XmlNodeType]::Whitespace) { - $newWs = $doc.CreateWhitespace("`n`t`t`t") - $childObjects.InsertBefore($newWs, $lastChild) | Out-Null - $childObjects.InsertBefore($newElem, $lastChild) | Out-Null - } else { - $childObjects.AppendChild($doc.CreateWhitespace("`n`t`t`t")) | Out-Null - $childObjects.AppendChild($newElem) | Out-Null - $childObjects.AppendChild($doc.CreateWhitespace("`n`t`t")) | Out-Null + $block = [regex]::Match($configContent, '(?s).*?') + if (-not $block.Success) { + # Самозакрытый раскрываем первой записью + $empty = [regex]::Match($configContent, '') + if (-not $empty.Success) { return "no-childobj" } + $replacement = "$eol`t`t`t$entry$eol`t`t" + $newContent = $configContent.Substring(0, $empty.Index) + $replacement + $configContent.Substring($empty.Index + $empty.Length) + [System.IO.File]::WriteAllText($ParentXmlPath, $newContent, $enc) + return "added" + } + + # byName: перед первым объектом того же вида, чьё имя больше нового. Subsystem — никогда: + # порядок подсистем в дереве задаёт порядок разделов в панели, пока их не перечислили в + # файла Ext/CommandInterface.xml (платформа этот список сама не заводит). + if ($ChildTag -cne "Subsystem" -and (Get-NewObjectPosition ([System.IO.Path]::GetDirectoryName([System.IO.Path]::GetFullPath($ParentXmlPath)))) -eq "byName") { + $lineRx = [regex]"(?m)^([ \t]*)<$ChildTag>([^<]*)" + $m = $lineRx.Match($configContent, $block.Index, $block.Length) + while ($m.Success) { + if ((Compare-MetadataNames $m.Groups[2].Value $ChildName) -gt 0) { + $newContent = $configContent.Substring(0, $m.Index) + $m.Groups[1].Value + $entry + $eol + $configContent.Substring($m.Index) + [System.IO.File]::WriteAllText($ParentXmlPath, $newContent, $enc) + return "added" + } + $m = $m.NextMatch() } } - # Save. Пишем через MemoryStream, а не прямо в файл: нужен шаг пост-обработки - # строки — XmlWriter отдаёт `encoding="utf-8"` и ``, Конфигуратор пишет - # `encoding="UTF-8"` и ``. - $cfgSettings = New-Object System.Xml.XmlWriterSettings - $cfgSettings.Encoding = New-Object System.Text.UTF8Encoding($true) - $cfgSettings.Indent = $false - $cfgSettings.NewLineHandling = [System.Xml.NewLineHandling]::None - $memStream = New-Object System.IO.MemoryStream - $writer = [System.Xml.XmlWriter]::Create($memStream, $cfgSettings) - $doc.Save($writer) - $writer.Flush(); $writer.Close() - - $cfgText = [System.Text.Encoding]::UTF8.GetString($memStream.ToArray()) - $memStream.Close() - if ($cfgText.Length -gt 0 -and $cfgText[0] -eq [char]0xFEFF) { $cfgText = $cfgText.Substring(1) } - $cfgText = $cfgText.Replace('encoding="utf-8"', 'encoding="UTF-8"') - # Пустой элемент: XmlWriter отдаёт ``, Конфигуратор пишет ``. Внутри - # CDATA/комментария ` />` может быть содержимым (там `>` не экранируется), - # поэтому они идут первыми ветками альтернации и возвращаются как есть. - $cfgText = [regex]::Replace($cfgText, '(?s)||(?<=\S) />', { param($m) if ($m.Value -eq ' />') { '/>' } else { $m.Value } }) - # Целевой перевод строки: стиль файла-назначения — правка наследует его (#44/#46/#47), - # новый файл получает канон выгрузки CRLF. Зеркало _detect_xml_style в py-порту. - $targetEol = if ([System.IO.File]::ReadAllText($ParentXmlPath) -notmatch "`r`n") { "`n" } else { "`r`n" } - $cfgText = ($cfgText -replace "`r`n", "`n") -replace "`n", $targetEol - [System.IO.File]::WriteAllText($ParentXmlPath, $cfgText, (New-Object System.Text.UTF8Encoding($true))) - + $closeSame = "" + $blockEnd = $block.Index + $block.Length + $lastSame = $configContent.LastIndexOf($closeSame, $blockEnd - 1, $block.Length, [System.StringComparison]::Ordinal) + if ($lastSame -ge 0) { + # После последнего объекта того же вида (группы по видам сохраняются) + $insertAt = $lastSame + $closeSame.Length + $newContent = $configContent.Substring(0, $insertAt) + "$eol`t`t`t$entry" + $configContent.Substring($insertAt) + } else { + # Объектов этого вида ещё нет: новая строка перед , + # отступ закрывающего тега переиспользуется + $closeAt = $configContent.LastIndexOf("", $blockEnd - 1, $block.Length, [System.StringComparison]::Ordinal) + $newContent = $configContent.Substring(0, $closeAt) + "`t$entry$eol`t`t" + $configContent.Substring($closeAt) + } + [System.IO.File]::WriteAllText($ParentXmlPath, $newContent, $enc) return "added" } diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index bd5c5e910..923279b59 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.py +++ b/.claude/skills/meta-compile/scripts/meta-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# meta-compile v1.99 — Compile 1C metadata object from JSON +# meta-compile v1.100 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -5209,10 +5209,71 @@ if commands: # 17. Register in Configuration.xml # --------------------------------------------------------------------------- +def get_new_object_position(cfg_dir): + """Куда навык ставит новую запись в — настройка newObjectPosition. + + databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML, + иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида + (так дописывает Конфигуратор); byName — по имени среди объектов того же вида. + Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard: + настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда + оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный. + configSrc считается от каталога .v8-project.json, как задокументировано в + docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + try: + pj = _sg_find_v8project(os.path.abspath(cfg_dir or ".")) or _sg_find_v8project(os.getcwd()) + if not pj: + return "end" + proj = json.loads(open(pj, encoding="utf-8-sig").read()) + proj_dir = os.path.dirname(pj) + cfg_full = os.path.normcase(os.path.abspath(cfg_dir or ".")).rstrip("\\/") + for db in proj.get("databases", []): + src = db.get("configSrc") + if src and db.get("newObjectPosition"): + src_full = os.path.normcase(os.path.abspath(os.path.join(proj_dir, src))).rstrip("\\/") + if cfg_full == src_full or cfg_full.startswith(src_full + os.sep): + return "byName" if str(db["newObjectPosition"]).lower() == "byname" else "end" + if str(proj.get("newObjectPosition") or "").lower() == "byname": + return "byName" + return "end" + except Exception: + return "end" + + +def compare_metadata_names(a, b): + """Порядок имён объектов метаданных, как в дереве Конфигуратора. + + Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше + букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не + используются — они разные на разных ОС и в разных рантаймах, а так оба порта сравнивают + одинаково везде. Равные ключи разводит ordinal-сравнение исходных строк. + Возвращает -1 | 0 | 1. Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + keys = [] + for name in (a, b): + parts = [] + for ch in name.lower(): + if ch == "ё": + ch = "е" + if ch.isdigit(): + parts.append("1" + ch) + elif ch.isalpha(): + parts.append("2" + ch) + else: + parts.append("0" + ch) + keys.append("".join(parts)) + if keys[0] != keys[1]: + return -1 if keys[0] < keys[1] else 1 + if a != b: + return -1 if a < b else 1 + return 0 + + def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name): """Регистрация объекта в родительского XML. - Общая реализация: эталон — meta-compile, копия — role-compile. + Общая реализация: эталон — meta-compile, копии — role-compile, xdto-compile. Реестр семьи: tests/skills/check-inline-drift.mjs. Возвращает исход: added | already | no-childobj | no-config. """ @@ -5263,6 +5324,20 @@ def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name) write_utf8_bom(parent_xml_path, new_content) return 'added' + # byName: перед первым объектом того же вида, чьё имя больше нового. Subsystem — никогда: + # порядок подсистем в дереве задаёт порядок разделов в панели, пока их не перечислили в + # файла Ext/CommandInterface.xml (платформа этот список сама не заводит). + if (child_tag != 'Subsystem' + and get_new_object_position(os.path.dirname(os.path.abspath(parent_xml_path))) == 'byName'): + line_rx = re.compile(rf'(?m)^([ \t]*)<{child_tag}>([^<]*)') + for m in line_rx.finditer(config_content, block.start(), block.end()): + if compare_metadata_names(m.group(2), child_name) > 0: + new_content = (config_content[:m.start()] + + f'{m.group(1)}{entry}{eol}' + + config_content[m.start():]) + write_utf8_bom(parent_xml_path, new_content) + return 'added' + close_same = f'' last_same = config_content.rfind(close_same, block.start(), block.end()) if last_same != -1: diff --git a/.claude/skills/role-compile/scripts/role-compile.ps1 b/.claude/skills/role-compile/scripts/role-compile.ps1 index d8da1de52..0d6a39c6b 100644 --- a/.claude/skills/role-compile/scripts/role-compile.ps1 +++ b/.claude/skills/role-compile/scripts/role-compile.ps1 @@ -1,4 +1,4 @@ -# role-compile v1.32 — Compile 1C role from JSON +# role-compile v1.33 — Compile 1C role from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills [CmdletBinding(PositionalBinding=$false)] param( @@ -1185,8 +1185,69 @@ $enc = New-Object System.Text.UTF8Encoding($true) # --- 12. Register in Configuration.xml --- +# Куда навык ставит новую запись в — настройка newObjectPosition. +# databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML, +# иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида +# (так дописывает Конфигуратор); byName — по имени среди объектов того же вида. +# Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard: +# настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда +# оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный. +# configSrc считается от каталога .v8-project.json, как задокументировано в +# docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs. +function Get-NewObjectPosition([string]$cfgDir) { + try { + if (-not $cfgDir) { $cfgDir = "." } + $pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir)) + if (-not $pj) { $pj = Find-V8Project (Get-Location).Path } + if (-not $pj) { return "end" } + $proj = Get-Content -Raw $pj | ConvertFrom-Json + $projDir = [System.IO.Path]::GetDirectoryName($pj) + $cfgFull = [System.IO.Path]::GetFullPath($cfgDir).TrimEnd('\', '/') + if ($proj.databases) { + foreach ($db in $proj.databases) { + if ($db.configSrc -and $db.newObjectPosition) { + $src = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($projDir, $db.configSrc)).TrimEnd('\', '/') + if ($cfgFull -eq $src -or $cfgFull.StartsWith($src + [System.IO.Path]::DirectorySeparatorChar)) { + if ("$($db.newObjectPosition)" -eq "byName") { return "byName" } + return "end" + } + } + } + } + if ("$($proj.newObjectPosition)" -eq "byName") { return "byName" } + return "end" + } catch { return "end" } +} + +# Порядок имён объектов метаданных, как в дереве Конфигуратора. +# Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше +# букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не +# используются — они разные на разных ОС и в разных рантаймах, а так оба порта сравнивают +# одинаково везде. Равные ключи разводит ordinal-сравнение исходных строк. +# Возвращает -1 | 0 | 1. Реестр семьи: tests/skills/check-inline-drift.mjs. +function Compare-MetadataNames([string]$a, [string]$b) { + $keys = @("", "") + $names = @($a, $b) + for ($i = 0; $i -lt 2; $i++) { + $sb = New-Object System.Text.StringBuilder + foreach ($ch in $names[$i].ToLowerInvariant().ToCharArray()) { + if ($ch -eq [char]0x0451) { $ch = [char]0x0435 } + if ([char]::IsDigit($ch)) { [void]$sb.Append('1') } + elseif ([char]::IsLetter($ch)) { [void]$sb.Append('2') } + else { [void]$sb.Append('0') } + [void]$sb.Append($ch) + } + $keys[$i] = $sb.ToString() + } + $r = [string]::CompareOrdinal($keys[0], $keys[1]) + if ($r -eq 0) { $r = [string]::CompareOrdinal($a, $b) } + if ($r -lt 0) { return -1 } + if ($r -gt 0) { return 1 } + return 0 +} + # Регистрация объекта в родительского XML. Общая реализация: эталон — -# meta-compile, копия — role-compile. Реестр семьи: tests/skills/check-inline-drift.mjs. +# meta-compile, копии — role-compile, xdto-compile. Реестр семьи: tests/skills/check-inline-drift.mjs. # Возвращает исход: added | already | no-childobj | no-config. function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [string]$ChildTag, [string]$ChildName) { if (-not (Test-Path $ParentXmlPath)) { return "no-config" } @@ -1206,56 +1267,56 @@ function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [st if ($e.InnerText -eq $ChildName) { return "already" } } - $newElem = $doc.CreateElement($ChildTag, "http://v8.1c.ru/8.3/MDClasses") - $newElem.InnerText = $ChildName + # Правка по сырому тексту, зеркально py-порту: сериализация DOM переписала бы файл целиком + # (регистр encoding, `` вместо ``), а текстовая вставка хранит его байт-в-байт — + # дельта ровно в одну строку. Правим чужой файл, значит наследуем его стиль (#44/#46/#47). + # DOM выше — только на чтение: найти ChildObjects и отсечь дубликат. + $configContent = [System.IO.File]::ReadAllText($ParentXmlPath, (New-Object System.Text.UTF8Encoding($false))) + $eol = if ($configContent.Contains("`r`n")) { "`r`n" } else { "`n" } + $entry = "<$ChildTag>$(Esc-XmlText $ChildName)" + $enc = New-Object System.Text.UTF8Encoding($true) - if ($existing.Count -gt 0) { - # Insert after last existing element of same type - $lastElem = $existing[$existing.Count - 1] - $newWs = $doc.CreateWhitespace("`n`t`t`t") - $childObjects.InsertAfter($newWs, $lastElem) | Out-Null - $childObjects.InsertAfter($newElem, $newWs) | Out-Null - } else { - # No existing elements of this type — insert before closing whitespace. - # Самозакрытый попадает сюда же: LastChild пуст, идёт ветка AppendChild. - $lastChild = $childObjects.LastChild - if ($lastChild.NodeType -eq [System.Xml.XmlNodeType]::Whitespace) { - $newWs = $doc.CreateWhitespace("`n`t`t`t") - $childObjects.InsertBefore($newWs, $lastChild) | Out-Null - $childObjects.InsertBefore($newElem, $lastChild) | Out-Null - } else { - $childObjects.AppendChild($doc.CreateWhitespace("`n`t`t`t")) | Out-Null - $childObjects.AppendChild($newElem) | Out-Null - $childObjects.AppendChild($doc.CreateWhitespace("`n`t`t")) | Out-Null + $block = [regex]::Match($configContent, '(?s).*?') + if (-not $block.Success) { + # Самозакрытый раскрываем первой записью + $empty = [regex]::Match($configContent, '') + if (-not $empty.Success) { return "no-childobj" } + $replacement = "$eol`t`t`t$entry$eol`t`t" + $newContent = $configContent.Substring(0, $empty.Index) + $replacement + $configContent.Substring($empty.Index + $empty.Length) + [System.IO.File]::WriteAllText($ParentXmlPath, $newContent, $enc) + return "added" + } + + # byName: перед первым объектом того же вида, чьё имя больше нового. Subsystem — никогда: + # порядок подсистем в дереве задаёт порядок разделов в панели, пока их не перечислили в + # файла Ext/CommandInterface.xml (платформа этот список сама не заводит). + if ($ChildTag -cne "Subsystem" -and (Get-NewObjectPosition ([System.IO.Path]::GetDirectoryName([System.IO.Path]::GetFullPath($ParentXmlPath)))) -eq "byName") { + $lineRx = [regex]"(?m)^([ \t]*)<$ChildTag>([^<]*)" + $m = $lineRx.Match($configContent, $block.Index, $block.Length) + while ($m.Success) { + if ((Compare-MetadataNames $m.Groups[2].Value $ChildName) -gt 0) { + $newContent = $configContent.Substring(0, $m.Index) + $m.Groups[1].Value + $entry + $eol + $configContent.Substring($m.Index) + [System.IO.File]::WriteAllText($ParentXmlPath, $newContent, $enc) + return "added" + } + $m = $m.NextMatch() } } - # Save. Пишем через MemoryStream, а не прямо в файл: нужен шаг пост-обработки - # строки — XmlWriter отдаёт `encoding="utf-8"` и ``, Конфигуратор пишет - # `encoding="UTF-8"` и ``. - $cfgSettings = New-Object System.Xml.XmlWriterSettings - $cfgSettings.Encoding = New-Object System.Text.UTF8Encoding($true) - $cfgSettings.Indent = $false - $cfgSettings.NewLineHandling = [System.Xml.NewLineHandling]::None - $memStream = New-Object System.IO.MemoryStream - $writer = [System.Xml.XmlWriter]::Create($memStream, $cfgSettings) - $doc.Save($writer) - $writer.Flush(); $writer.Close() - - $cfgText = [System.Text.Encoding]::UTF8.GetString($memStream.ToArray()) - $memStream.Close() - if ($cfgText.Length -gt 0 -and $cfgText[0] -eq [char]0xFEFF) { $cfgText = $cfgText.Substring(1) } - $cfgText = $cfgText.Replace('encoding="utf-8"', 'encoding="UTF-8"') - # Пустой элемент: XmlWriter отдаёт ``, Конфигуратор пишет ``. Внутри - # CDATA/комментария ` />` может быть содержимым (там `>` не экранируется), - # поэтому они идут первыми ветками альтернации и возвращаются как есть. - $cfgText = [regex]::Replace($cfgText, '(?s)||(?<=\S) />', { param($m) if ($m.Value -eq ' />') { '/>' } else { $m.Value } }) - # Целевой перевод строки: стиль файла-назначения — правка наследует его (#44/#46/#47), - # новый файл получает канон выгрузки CRLF. Зеркало _detect_xml_style в py-порту. - $targetEol = if ([System.IO.File]::ReadAllText($ParentXmlPath) -notmatch "`r`n") { "`n" } else { "`r`n" } - $cfgText = ($cfgText -replace "`r`n", "`n") -replace "`n", $targetEol - [System.IO.File]::WriteAllText($ParentXmlPath, $cfgText, (New-Object System.Text.UTF8Encoding($true))) - + $closeSame = "" + $blockEnd = $block.Index + $block.Length + $lastSame = $configContent.LastIndexOf($closeSame, $blockEnd - 1, $block.Length, [System.StringComparison]::Ordinal) + if ($lastSame -ge 0) { + # После последнего объекта того же вида (группы по видам сохраняются) + $insertAt = $lastSame + $closeSame.Length + $newContent = $configContent.Substring(0, $insertAt) + "$eol`t`t`t$entry" + $configContent.Substring($insertAt) + } else { + # Объектов этого вида ещё нет: новая строка перед , + # отступ закрывающего тега переиспользуется + $closeAt = $configContent.LastIndexOf("", $blockEnd - 1, $block.Length, [System.StringComparison]::Ordinal) + $newContent = $configContent.Substring(0, $closeAt) + "`t$entry$eol`t`t" + $configContent.Substring($closeAt) + } + [System.IO.File]::WriteAllText($ParentXmlPath, $newContent, $enc) return "added" } diff --git a/.claude/skills/role-compile/scripts/role-compile.py b/.claude/skills/role-compile/scripts/role-compile.py index 0d1a3bfed..7a010edf1 100644 --- a/.claude/skills/role-compile/scripts/role-compile.py +++ b/.claude/skills/role-compile/scripts/role-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# role-compile v1.32 — Compile 1C role from JSON +# role-compile v1.33 — Compile 1C role from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json @@ -1056,10 +1056,71 @@ def parse_object_entry(entry): return {'Name': obj_name, 'Rights': rights} +def get_new_object_position(cfg_dir): + """Куда навык ставит новую запись в — настройка newObjectPosition. + + databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML, + иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида + (так дописывает Конфигуратор); byName — по имени среди объектов того же вида. + Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard: + настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда + оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный. + configSrc считается от каталога .v8-project.json, как задокументировано в + docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + try: + pj = _sg_find_v8project(os.path.abspath(cfg_dir or ".")) or _sg_find_v8project(os.getcwd()) + if not pj: + return "end" + proj = json.loads(open(pj, encoding="utf-8-sig").read()) + proj_dir = os.path.dirname(pj) + cfg_full = os.path.normcase(os.path.abspath(cfg_dir or ".")).rstrip("\\/") + for db in proj.get("databases", []): + src = db.get("configSrc") + if src and db.get("newObjectPosition"): + src_full = os.path.normcase(os.path.abspath(os.path.join(proj_dir, src))).rstrip("\\/") + if cfg_full == src_full or cfg_full.startswith(src_full + os.sep): + return "byName" if str(db["newObjectPosition"]).lower() == "byname" else "end" + if str(proj.get("newObjectPosition") or "").lower() == "byname": + return "byName" + return "end" + except Exception: + return "end" + + +def compare_metadata_names(a, b): + """Порядок имён объектов метаданных, как в дереве Конфигуратора. + + Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше + букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не + используются — они разные на разных ОС и в разных рантаймах, а так оба порта сравнивают + одинаково везде. Равные ключи разводит ordinal-сравнение исходных строк. + Возвращает -1 | 0 | 1. Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + keys = [] + for name in (a, b): + parts = [] + for ch in name.lower(): + if ch == "ё": + ch = "е" + if ch.isdigit(): + parts.append("1" + ch) + elif ch.isalpha(): + parts.append("2" + ch) + else: + parts.append("0" + ch) + keys.append("".join(parts)) + if keys[0] != keys[1]: + return -1 if keys[0] < keys[1] else 1 + if a != b: + return -1 if a < b else 1 + return 0 + + def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name): """Регистрация объекта в родительского XML. - Общая реализация: эталон — meta-compile, копия — role-compile. + Общая реализация: эталон — meta-compile, копии — role-compile, xdto-compile. Реестр семьи: tests/skills/check-inline-drift.mjs. Возвращает исход: added | already | no-childobj | no-config. """ @@ -1110,6 +1171,20 @@ def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name) write_utf8_bom(parent_xml_path, new_content) return 'added' + # byName: перед первым объектом того же вида, чьё имя больше нового. Subsystem — никогда: + # порядок подсистем в дереве задаёт порядок разделов в панели, пока их не перечислили в + # файла Ext/CommandInterface.xml (платформа этот список сама не заводит). + if (child_tag != 'Subsystem' + and get_new_object_position(os.path.dirname(os.path.abspath(parent_xml_path))) == 'byName'): + line_rx = re.compile(rf'(?m)^([ \t]*)<{child_tag}>([^<]*)') + for m in line_rx.finditer(config_content, block.start(), block.end()): + if compare_metadata_names(m.group(2), child_name) > 0: + new_content = (config_content[:m.start()] + + f'{m.group(1)}{entry}{eol}' + + config_content[m.start():]) + write_utf8_bom(parent_xml_path, new_content) + return 'added' + close_same = f'' last_same = config_content.rfind(close_same, block.start(), block.end()) if last_same != -1: diff --git a/.claude/skills/subsystem-compile/scripts/subsystem-compile.ps1 b/.claude/skills/subsystem-compile/scripts/subsystem-compile.ps1 index 8a9299c32..3c33caa20 100644 --- a/.claude/skills/subsystem-compile/scripts/subsystem-compile.ps1 +++ b/.claude/skills/subsystem-compile/scripts/subsystem-compile.ps1 @@ -1,4 +1,4 @@ -# subsystem-compile v1.30 — Create 1C subsystem from JSON definition +# subsystem-compile v1.31 — Create 1C subsystem from JSON definition # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills [CmdletBinding(PositionalBinding=$false)] param( @@ -690,77 +690,32 @@ function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [st $childObjects = $doc.SelectSingleNode("//md:$ParentTag/md:ChildObjects", $ns) if (-not $childObjects) { return "no-childobj" } - # Check for self-closing tag - $isSelfClosing = (-not $childObjects.HasChildNodes) -or ($childObjects.IsEmpty) - - # Check if already registered foreach ($child in $childObjects.ChildNodes) { if ($child.NodeType -eq 'Element' -and $child.LocalName -eq $ChildTag -and $child.InnerText -eq $ChildName) { return "already" } } - $newEl = $doc.CreateElement($ChildTag, "http://v8.1c.ru/8.3/MDClasses") - $newEl.InnerText = $ChildName + # Правка по сырому тексту, зеркально py-порту: сериализация DOM переписала бы файл целиком + # (регистр encoding, `` вместо ``), а текстовая вставка хранит его байт-в-байт. + # Правим чужой файл, значит наследуем его стиль (#44/#46/#47). DOM выше — только на чтение. + $rawText = [System.IO.File]::ReadAllText($ParentXmlPath, (New-Object System.Text.UTF8Encoding($false))) + $eol = if ($rawText.Contains("`r`n")) { "`r`n" } else { "`n" } + $entry = "<$ChildTag>$(Esc-XmlText $ChildName)" - if ($isSelfClosing) { - # Expand self-closing tag - $parentIndent = "" - $prev = $childObjects.PreviousSibling - if ($prev -and ($prev.NodeType -eq 'Whitespace' -or $prev.NodeType -eq 'SignificantWhitespace')) { - if ($prev.Value -match '(\t+)$') { $parentIndent = $Matches[1] } - } - $childIndent = "$parentIndent`t" - $ws1 = $doc.CreateWhitespace("`r`n$childIndent") - $ws2 = $doc.CreateWhitespace("`r`n$parentIndent") - $childObjects.AppendChild($ws1) | Out-Null - $childObjects.AppendChild($newEl) | Out-Null - $childObjects.AppendChild($ws2) | Out-Null + $empty = [regex]::Match($rawText, '') + if ($empty.Success) { + $replacement = "$eol`t`t`t$entry$eol`t`t" + $rawText = $rawText.Substring(0, $empty.Index) + $replacement + $rawText.Substring($empty.Index + $empty.Length) } else { - # Insert before trailing whitespace - $childIndent = "`t`t`t" - foreach ($child in $childObjects.ChildNodes) { - if ($child.NodeType -eq 'Whitespace' -or $child.NodeType -eq 'SignificantWhitespace') { - if ($child.Value -match '^\r?\n(\t+)') { $childIndent = $Matches[1]; break } - } - } - $trailing = $childObjects.LastChild - $ws = $doc.CreateWhitespace("`r`n$childIndent") - if ($trailing -and ($trailing.NodeType -eq 'Whitespace' -or $trailing.NodeType -eq 'SignificantWhitespace')) { - $childObjects.InsertBefore($ws, $trailing) | Out-Null - $childObjects.InsertBefore($newEl, $trailing) | Out-Null - } else { - $childObjects.AppendChild($ws) | Out-Null - $childObjects.AppendChild($newEl) | Out-Null - } + # Отступ вставки берём у закрывающего тега +1 уровень: подстановка по голому + # '' удваивала бы уже присутствующий отступ строки. + $cm = [regex]::Match($rawText, '([ ]*)') + if (-not $cm.Success) { return "no-childobj" } + $rawText = $rawText.Substring(0, $cm.Index) + $cm.Groups[1].Value + "`t" + $entry + $eol + $cm.Groups[1].Value + "" + $rawText.Substring($cm.Index + $cm.Length) } - # Save parent XML - $settings = New-Object System.Xml.XmlWriterSettings - $settings.Encoding = New-Object System.Text.UTF8Encoding($true) - $settings.Indent = $false - $settings.NewLineHandling = [System.Xml.NewLineHandling]::None - - $memStream = New-Object System.IO.MemoryStream - $writer = [System.Xml.XmlWriter]::Create($memStream, $settings) - $doc.Save($writer) - $writer.Flush(); $writer.Close() - - $bytes = $memStream.ToArray() - $memStream.Close() - $text = [System.Text.Encoding]::UTF8.GetString($bytes) - if ($text.Length -gt 0 -and $text[0] -eq [char]0xFEFF) { $text = $text.Substring(1) } - $text = $text.Replace('encoding="utf-8"', 'encoding="UTF-8"') - # Пустой элемент: XmlWriter отдаёт ``, Конфигуратор пишет ``. Внутри - # CDATA/комментария ` />` может быть содержимым (там `>` не экранируется), - # поэтому они идут первыми ветками альтернации и возвращаются как есть. - $text = [regex]::Replace($text, '(?s)||(?<=\S) />', { param($m) if ($m.Value -eq ' />') { '/>' } else { $m.Value } }) - # Целевой перевод строки: стиль файла-назначения — правка наследует его (#44/#46/#47), - # новый файл получает канон выгрузки CRLF. Зеркало _detect_xml_style в py-порту. - $targetEol = if ((Test-Path -LiteralPath $ParentXmlPath) -and ([System.IO.File]::ReadAllText($ParentXmlPath) -notmatch "`r`n")) { "`n" } else { "`r`n" } - $text = ($text -replace "`r`n", "`n") -replace "`n", $targetEol - [System.IO.File]::WriteAllText($ParentXmlPath, $text, (New-Object System.Text.UTF8Encoding($true))) - + [System.IO.File]::WriteAllText($ParentXmlPath, $rawText, (New-Object System.Text.UTF8Encoding($true))) return "added" } diff --git a/.claude/skills/subsystem-compile/scripts/subsystem-compile.py b/.claude/skills/subsystem-compile/scripts/subsystem-compile.py index 3314e6b60..7690fa80f 100644 --- a/.claude/skills/subsystem-compile/scripts/subsystem-compile.py +++ b/.claude/skills/subsystem-compile/scripts/subsystem-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# subsystem-compile v1.30 — Create 1C subsystem from JSON definition +# subsystem-compile v1.31 — Create 1C subsystem from JSON definition # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json @@ -489,16 +489,19 @@ def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name) # Правку ведём по сырому тексту, а не сериализацией ET: она не сохраняет отступы # и теряет xmlns, объявленные только внутри значений атрибутов (#38). entry = f'<{child_tag}>{esc_xml_text(child_name)}' - if '' in raw_text: + empty = re.search(r'', raw_text) + if empty is not None: replacement = '' + eol + f'\t\t\t{entry}' + eol + '\t\t' - raw_text = raw_text.replace('', replacement, 1) - elif '' in raw_text: + raw_text = raw_text[:empty.start()] + replacement + raw_text[empty.end():] + else: # Отступ вставки берём у закрывающего тега +1 уровень: подстановка # по голому '' удваивала бы уже присутствующий отступ # строки (получалось 5 табов вместо 3 — PS-порт через DOM даёт 3). - raw_text = re.sub(r'([ \t]*)', - lambda m: m.group(1) + '\t' + entry + eol + m.group(1) + '', - raw_text, count=1) + cm = re.search(r'([ \t]*)', raw_text) + if cm is None: + return 'no-childobj' + raw_text = (raw_text[:cm.start()] + cm.group(1) + '\t' + entry + eol + + cm.group(1) + '' + raw_text[cm.end():]) write_utf8_bom(parent_xml_path, raw_text) return 'added' diff --git a/.claude/skills/xdto-compile/scripts/xdto-compile.ps1 b/.claude/skills/xdto-compile/scripts/xdto-compile.ps1 index b2462f1f9..e078360de 100644 --- a/.claude/skills/xdto-compile/scripts/xdto-compile.ps1 +++ b/.claude/skills/xdto-compile/scripts/xdto-compile.ps1 @@ -1,4 +1,4 @@ -# xdto-compile v1.12 — Build a 1C XDTO package from an XML Schema (XSD) (+support-guard: общая реализация вместо урезанной) +# xdto-compile v1.13 — Build a 1C XDTO package from an XML Schema (XSD) (+support-guard: общая реализация вместо урезанной) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills [CmdletBinding(PositionalBinding=$false)] param( @@ -988,69 +988,149 @@ if ($declaredImports.Count -gt 0 -and (Test-Path $xdtoRootDir)) { } } -$configXmlPath = Join-Path $OutputDir "Configuration.xml" -$regResult = "no-config" -if (Test-Path $configXmlPath) { - $configDoc = New-Object System.Xml.XmlDocument - $configDoc.PreserveWhitespace = $true - $configDoc.Load($configXmlPath) - $nsMgr = New-Object System.Xml.XmlNamespaceManager($configDoc.NameTable) - $nsMgr.AddNamespace("md", $MD_NS) - $childObjects = $configDoc.SelectSingleNode("//md:Configuration/md:ChildObjects", $nsMgr) - if ($childObjects) { - $existing = $childObjects.SelectNodes("md:XDTOPackage", $nsMgr) - $already = $false - foreach ($e in $existing) { if ($e.InnerText -eq $Name) { $already = $true; break } } - if ($already) { - $regResult = "already" - } else { - $newElem = $configDoc.CreateElement("XDTOPackage", $MD_NS) - $newElem.InnerText = $Name - if ($existing.Count -gt 0) { - $lastElem = $existing[$existing.Count - 1] - $newWs = $configDoc.CreateWhitespace("`n`t`t`t") - $childObjects.InsertAfter($newWs, $lastElem) | Out-Null - $childObjects.InsertAfter($newElem, $newWs) | Out-Null - } else { - $lastChild = $childObjects.LastChild - if ($lastChild -and $lastChild.NodeType -eq [System.Xml.XmlNodeType]::Whitespace) { - $newWs = $configDoc.CreateWhitespace("`n`t`t`t") - $childObjects.InsertBefore($newWs, $lastChild) | Out-Null - $childObjects.InsertBefore($newElem, $lastChild) | Out-Null - } else { - $childObjects.AppendChild($configDoc.CreateWhitespace("`n`t`t`t")) | Out-Null - $childObjects.AppendChild($newElem) | Out-Null - $childObjects.AppendChild($configDoc.CreateWhitespace("`n`t`t")) | Out-Null +function Esc-XmlText { + param([string]$s) + return $s.Replace('&','&').Replace('<','<').Replace('>','>') +} + +# Куда навык ставит новую запись в — настройка newObjectPosition. +# databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML, +# иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида +# (так дописывает Конфигуратор); byName — по имени среди объектов того же вида. +# Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard: +# настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда +# оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный. +# configSrc считается от каталога .v8-project.json, как задокументировано в +# docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs. +function Get-NewObjectPosition([string]$cfgDir) { + try { + if (-not $cfgDir) { $cfgDir = "." } + $pj = Find-V8Project ([System.IO.Path]::GetFullPath($cfgDir)) + if (-not $pj) { $pj = Find-V8Project (Get-Location).Path } + if (-not $pj) { return "end" } + $proj = Get-Content -Raw $pj | ConvertFrom-Json + $projDir = [System.IO.Path]::GetDirectoryName($pj) + $cfgFull = [System.IO.Path]::GetFullPath($cfgDir).TrimEnd('\', '/') + if ($proj.databases) { + foreach ($db in $proj.databases) { + if ($db.configSrc -and $db.newObjectPosition) { + $src = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($projDir, $db.configSrc)).TrimEnd('\', '/') + if ($cfgFull -eq $src -or $cfgFull.StartsWith($src + [System.IO.Path]::DirectorySeparatorChar)) { + if ("$($db.newObjectPosition)" -eq "byName") { return "byName" } + return "end" + } } } - $cfgSettings = New-Object System.Xml.XmlWriterSettings - $cfgSettings.Encoding = New-Object System.Text.UTF8Encoding($true) - $cfgSettings.Indent = $false - $cfgSettings.NewLineHandling = [System.Xml.NewLineHandling]::None - # Через MemoryStream, а не прямо в файл: нужен шаг пост-обработки строки. - $memStream = New-Object System.IO.MemoryStream - $writer = [System.Xml.XmlWriter]::Create($memStream, $cfgSettings) - $configDoc.Save($writer) - $writer.Flush(); $writer.Close() + } + if ("$($proj.newObjectPosition)" -eq "byName") { return "byName" } + return "end" + } catch { return "end" } +} - $cfgText = [System.Text.Encoding]::UTF8.GetString($memStream.ToArray()) - $memStream.Close() - if ($cfgText.Length -gt 0 -and $cfgText[0] -eq [char]0xFEFF) { $cfgText = $cfgText.Substring(1) } - $cfgText = $cfgText.Replace('encoding="utf-8"', 'encoding="UTF-8"') - # Пустой элемент: XmlWriter отдаёт ``, Конфигуратор пишет ``. Внутри - # CDATA/комментария ` />` может быть содержимым (там `>` не экранируется), - # поэтому они идут первыми ветками альтернации и возвращаются как есть. - $cfgText = [regex]::Replace($cfgText, '(?s)||(?<=\S) />', { param($m) if ($m.Value -eq ' />') { '/>' } else { $m.Value } }) - # Целевой перевод строки: стиль файла-назначения — правка наследует его (#44/#46/#47), - # новый файл получает канон выгрузки CRLF. Зеркало _detect_xml_style в py-порту. - $targetEol = if ((Test-Path -LiteralPath $configXmlPath) -and ([System.IO.File]::ReadAllText($configXmlPath) -notmatch "`r`n")) { "`n" } else { "`r`n" } - $cfgText = ($cfgText -replace "`r`n", "`n") -replace "`n", $targetEol - [System.IO.File]::WriteAllText($configXmlPath, $cfgText, (New-Object System.Text.UTF8Encoding($true))) - $regResult = "added" +# Порядок имён объектов метаданных, как в дереве Конфигуратора. +# Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше +# букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не +# используются — они разные на разных ОС и в разных рантаймах, а так оба порта сравнивают +# одинаково везде. Равные ключи разводит ordinal-сравнение исходных строк. +# Возвращает -1 | 0 | 1. Реестр семьи: tests/skills/check-inline-drift.mjs. +function Compare-MetadataNames([string]$a, [string]$b) { + $keys = @("", "") + $names = @($a, $b) + for ($i = 0; $i -lt 2; $i++) { + $sb = New-Object System.Text.StringBuilder + foreach ($ch in $names[$i].ToLowerInvariant().ToCharArray()) { + if ($ch -eq [char]0x0451) { $ch = [char]0x0435 } + if ([char]::IsDigit($ch)) { [void]$sb.Append('1') } + elseif ([char]::IsLetter($ch)) { [void]$sb.Append('2') } + else { [void]$sb.Append('0') } + [void]$sb.Append($ch) + } + $keys[$i] = $sb.ToString() + } + $r = [string]::CompareOrdinal($keys[0], $keys[1]) + if ($r -eq 0) { $r = [string]::CompareOrdinal($a, $b) } + if ($r -lt 0) { return -1 } + if ($r -gt 0) { return 1 } + return 0 +} + +# Регистрация объекта в родительского XML. Общая реализация: эталон — +# meta-compile, копии — role-compile, xdto-compile. Реестр семьи: tests/skills/check-inline-drift.mjs. +# Возвращает исход: added | already | no-childobj | no-config. +function Register-InChildObjects([string]$ParentXmlPath, [string]$ParentTag, [string]$ChildTag, [string]$ChildName) { + if (-not (Test-Path $ParentXmlPath)) { return "no-config" } + + $doc = New-Object System.Xml.XmlDocument + $doc.PreserveWhitespace = $true + $doc.Load($ParentXmlPath) + + $nsMgr = New-Object System.Xml.XmlNamespaceManager($doc.NameTable) + $nsMgr.AddNamespace("md", "http://v8.1c.ru/8.3/MDClasses") + + $childObjects = $doc.SelectSingleNode("//md:$ParentTag/md:ChildObjects", $nsMgr) + if (-not $childObjects) { return "no-childobj" } + + $existing = $childObjects.SelectNodes("md:$ChildTag", $nsMgr) + foreach ($e in $existing) { + if ($e.InnerText -eq $ChildName) { return "already" } + } + + # Правка по сырому тексту, зеркально py-порту: сериализация DOM переписала бы файл целиком + # (регистр encoding, `` вместо ``), а текстовая вставка хранит его байт-в-байт — + # дельта ровно в одну строку. Правим чужой файл, значит наследуем его стиль (#44/#46/#47). + # DOM выше — только на чтение: найти ChildObjects и отсечь дубликат. + $configContent = [System.IO.File]::ReadAllText($ParentXmlPath, (New-Object System.Text.UTF8Encoding($false))) + $eol = if ($configContent.Contains("`r`n")) { "`r`n" } else { "`n" } + $entry = "<$ChildTag>$(Esc-XmlText $ChildName)" + $enc = New-Object System.Text.UTF8Encoding($true) + + $block = [regex]::Match($configContent, '(?s).*?') + if (-not $block.Success) { + # Самозакрытый раскрываем первой записью + $empty = [regex]::Match($configContent, '') + if (-not $empty.Success) { return "no-childobj" } + $replacement = "$eol`t`t`t$entry$eol`t`t" + $newContent = $configContent.Substring(0, $empty.Index) + $replacement + $configContent.Substring($empty.Index + $empty.Length) + [System.IO.File]::WriteAllText($ParentXmlPath, $newContent, $enc) + return "added" + } + + # byName: перед первым объектом того же вида, чьё имя больше нового. Subsystem — никогда: + # порядок подсистем в дереве задаёт порядок разделов в панели, пока их не перечислили в + # файла Ext/CommandInterface.xml (платформа этот список сама не заводит). + if ($ChildTag -cne "Subsystem" -and (Get-NewObjectPosition ([System.IO.Path]::GetDirectoryName([System.IO.Path]::GetFullPath($ParentXmlPath)))) -eq "byName") { + $lineRx = [regex]"(?m)^([ \t]*)<$ChildTag>([^<]*)" + $m = $lineRx.Match($configContent, $block.Index, $block.Length) + while ($m.Success) { + if ((Compare-MetadataNames $m.Groups[2].Value $ChildName) -gt 0) { + $newContent = $configContent.Substring(0, $m.Index) + $m.Groups[1].Value + $entry + $eol + $configContent.Substring($m.Index) + [System.IO.File]::WriteAllText($ParentXmlPath, $newContent, $enc) + return "added" + } + $m = $m.NextMatch() } } + + $closeSame = "" + $blockEnd = $block.Index + $block.Length + $lastSame = $configContent.LastIndexOf($closeSame, $blockEnd - 1, $block.Length, [System.StringComparison]::Ordinal) + if ($lastSame -ge 0) { + # После последнего объекта того же вида (группы по видам сохраняются) + $insertAt = $lastSame + $closeSame.Length + $newContent = $configContent.Substring(0, $insertAt) + "$eol`t`t`t$entry" + $configContent.Substring($insertAt) + } else { + # Объектов этого вида ещё нет: новая строка перед , + # отступ закрывающего тега переиспользуется + $closeAt = $configContent.LastIndexOf("", $blockEnd - 1, $block.Length, [System.StringComparison]::Ordinal) + $newContent = $configContent.Substring(0, $closeAt) + "`t$entry$eol`t`t" + $configContent.Substring($closeAt) + } + [System.IO.File]::WriteAllText($ParentXmlPath, $newContent, $enc) + return "added" } +$configXmlPath = Join-Path $OutputDir "Configuration.xml" +$regResult = Register-InChildObjects $configXmlPath "Configuration" "XDTOPackage" $Name + # --- Report --- $typeCount = 0 @@ -1069,5 +1149,6 @@ if ($script:warnings.Count -gt 0) { switch ($regResult) { "added" { Write-Host " Configuration.xml: $Name добавлен в ChildObjects" } "already" { Write-Host " Configuration.xml: $Name уже зарегистрирован" } + "no-childobj" { [Console]::Error.WriteLine("ПРЕДУПРЕЖДЕНИЕ: Configuration.xml найден, но не найден") } "no-config" { Write-Host " Configuration.xml не найден — регистрация пропущена" } } diff --git a/.claude/skills/xdto-compile/scripts/xdto-compile.py b/.claude/skills/xdto-compile/scripts/xdto-compile.py index 09310fa0e..893c74334 100644 --- a/.claude/skills/xdto-compile/scripts/xdto-compile.py +++ b/.claude/skills/xdto-compile/scripts/xdto-compile.py @@ -1,4 +1,4 @@ -# xdto-compile v1.12 — Build a 1C XDTO package from an XML Schema (XSD) (Python port) (+support-guard: общая реализация вместо урезанной) +# xdto-compile v1.13 — Build a 1C XDTO package from an XML Schema (XSD) (Python port) (+support-guard: общая реализация вместо урезанной) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json @@ -6,6 +6,7 @@ import os import re import sys import uuid +import xml.etree.ElementTree as ET from lxml import etree @@ -1093,43 +1094,168 @@ if declared_imports and os.path.isdir(xdto_root_dir): warn(f'Импорт "{imp}" не разрешается: пакета с таким namespace в конфигурации нет. ' "Платформа отвергнет пакет при обновлении — соберите зависимость первой") -config_xml = os.path.join(args.OutputDir, "Configuration.xml") -reg_result = "no-config" -if os.path.exists(config_xml): - with open(config_xml, "rb") as f: - raw = f.read() - had_bom = raw.startswith(b"\xef\xbb\xbf") - cfg_doc = _parse_xml(config_xml) - child_objects = cfg_doc.find(f".//{{{MD_NS}}}Configuration/{{{MD_NS}}}ChildObjects") - if child_objects is not None: - existing = child_objects.findall(f"{{{MD_NS}}}XDTOPackage") - if any((e.text or "") == name for e in existing): - reg_result = "already" - else: - new_elem = etree.SubElement(child_objects, f"{{{MD_NS}}}XDTOPackage") - new_elem.text = name - if existing: - last = existing[-1] - new_elem.tail = last.tail - child_objects.remove(new_elem) - last.addnext(new_elem) +def esc_xml_text(s): + # Эскейп ТЕКСТА элемента: только & < > (кавычки в тексте 1С держит raw). + return s.replace('&', '&').replace('<', '<').replace('>', '>') + + +def write_utf8_bom(path, content): + # newline='' — без трансляции: иначе текстовый режим Python дал бы CRLF на Windows + # и LF на macOS, то есть вывод навыка зависел бы от ОС. + with open(path, 'w', encoding='utf-8-sig', newline='') as f: + f.write(content) + + +def get_new_object_position(cfg_dir): + """Куда навык ставит новую запись в — настройка newObjectPosition. + + databases[].newObjectPosition базы, чей configSrc охватывает каталог родительского XML, + иначе корневое поле, иначе end. Значения: end — после последнего объекта того же вида + (так дописывает Конфигуратор); byName — по имени среди объектов того же вида. + Файл ищем от каталога конфигурации и лишь потом от cwd — в отличие от support-guard: + настройка принадлежит выгрузке, а рабочим каталогом при вызове навыка почти всегда + оказывается чужой проект со своим .v8-project.json, и он перекрыл бы нужный. + configSrc считается от каталога .v8-project.json, как задокументировано в + docs/v8-project-guide.md. Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + try: + pj = _sg_find_v8project(os.path.abspath(cfg_dir or ".")) or _sg_find_v8project(os.getcwd()) + if not pj: + return "end" + proj = json.loads(open(pj, encoding="utf-8-sig").read()) + proj_dir = os.path.dirname(pj) + cfg_full = os.path.normcase(os.path.abspath(cfg_dir or ".")).rstrip("\\/") + for db in proj.get("databases", []): + src = db.get("configSrc") + if src and db.get("newObjectPosition"): + src_full = os.path.normcase(os.path.abspath(os.path.join(proj_dir, src))).rstrip("\\/") + if cfg_full == src_full or cfg_full.startswith(src_full + os.sep): + return "byName" if str(db["newObjectPosition"]).lower() == "byname" else "end" + if str(proj.get("newObjectPosition") or "").lower() == "byname": + return "byName" + return "end" + except Exception: + return "end" + + +def compare_metadata_names(a, b): + """Порядок имён объектов метаданных, как в дереве Конфигуратора. + + Ключ — пары «ранг+символ»: регистр не учитывается, подчёркивание раньше цифр, цифры раньше + букв, буквы по кодам (латиница раньше кириллицы), ё на месте е. Культурные таблицы не + используются — они разные на разных ОС и в разных рантаймах, а так оба порта сравнивают + одинаково везде. Равные ключи разводит ordinal-сравнение исходных строк. + Возвращает -1 | 0 | 1. Реестр семьи: tests/skills/check-inline-drift.mjs. + """ + keys = [] + for name in (a, b): + parts = [] + for ch in name.lower(): + if ch == "ё": + ch = "е" + if ch.isdigit(): + parts.append("1" + ch) + elif ch.isalpha(): + parts.append("2" + ch) else: - new_elem.tail = child_objects.text - data = etree.tostring(cfg_doc, xml_declaration=True, encoding="UTF-8") - # lxml пишет декларацию в ОДИНАРНЫХ кавычках, платформа и PS-порт — в двойных. - data = data.replace(b"", - b'') - # Парсер XML по спецификации схлопывает CRLF в LF, поэтому tostring отдаёт - # LF-документ. Возвращаем EOL исходного файла: правка существующего файла - # сохраняет его стиль (#44/#46/#47). Правило то же, что у _detect_xml_style - # и у $targetEol в PS-порту: есть CRLF → CRLF. - src_eol = b"\r\n" if b"\r\n" in raw else b"\n" - data = data.replace(b"\r\n", b"\n").replace(b"\n", src_eol) - if had_bom: - data = b"\xef\xbb\xbf" + data - with open(config_xml, "wb") as f: - f.write(data) - reg_result = "added" + parts.append("0" + ch) + keys.append("".join(parts)) + if keys[0] != keys[1]: + return -1 if keys[0] < keys[1] else 1 + if a != b: + return -1 if a < b else 1 + return 0 + + +def register_in_childobjects(parent_xml_path, parent_tag, child_tag, child_name): + """Регистрация объекта в родительского XML. + + Общая реализация: эталон — meta-compile, копии — role-compile, xdto-compile. + Реестр семьи: tests/skills/check-inline-drift.mjs. + Возвращает исход: added | already | no-childobj | no-config. + """ + if not os.path.isfile(parent_xml_path): + return 'no-config' + + # Read raw content, preserving BOM/EOL byte-for-byte (newline='' => no translation) + with open(parent_xml_path, 'r', encoding='utf-8-sig', newline='') as f: + config_content = f.read() + + ns = 'http://v8.1c.ru/8.3/MDClasses' + # ET is used ONLY read-only here: to locate ChildObjects and detect a duplicate. + # We deliberately do NOT re-serialize Configuration.xml with ElementTree.write(): + # it drops every xmlns declaration used only inside attribute VALUES (e.g. + # xsi:type="app:ApplicationUsePurpose" in UsePurposes) because ET never sees such + # prefixes in element/attribute names. The dropped declaration makes XDTO read the + # value as anyType and Designer refuses to load the file (issue #38). Registration is + # therefore done by raw-text insertion, preserving BOM, EOL and all namespaces + # byte-for-byte (same approach as subsystem-compile). + tree = ET.parse(parent_xml_path) + root = tree.getroot() + + child_objects = root.find(f'{{{ns}}}{parent_tag}/{{{ns}}}ChildObjects') + if child_objects is None: + # Try direct path + parent_elem = root.find(f'{{{ns}}}{parent_tag}') + if parent_elem is not None: + child_objects = parent_elem.find(f'{{{ns}}}ChildObjects') + + if child_objects is None: + return 'no-childobj' + + existing = child_objects.findall(f'{{{ns}}}{child_tag}') + if any((e.text or '').strip() == child_name for e in existing): + return 'already' + + eol = '\r\n' if '\r\n' in config_content else '\n' + entry = f'<{child_tag}>{esc_xml_text(child_name)}' + + block = re.search(r'.*?', config_content, re.S) + if block is None: + # Empty self-closing => open it with the first entry. + empty = re.search(r'', config_content) + if empty is None: + return 'no-childobj' + replacement = f'{eol}\t\t\t{entry}{eol}\t\t' + new_content = config_content[:empty.start()] + replacement + config_content[empty.end():] + write_utf8_bom(parent_xml_path, new_content) + return 'added' + + # byName: перед первым объектом того же вида, чьё имя больше нового. Subsystem — никогда: + # порядок подсистем в дереве задаёт порядок разделов в панели, пока их не перечислили в + # файла Ext/CommandInterface.xml (платформа этот список сама не заводит). + if (child_tag != 'Subsystem' + and get_new_object_position(os.path.dirname(os.path.abspath(parent_xml_path))) == 'byName'): + line_rx = re.compile(rf'(?m)^([ \t]*)<{child_tag}>([^<]*)') + for m in line_rx.finditer(config_content, block.start(), block.end()): + if compare_metadata_names(m.group(2), child_name) > 0: + new_content = (config_content[:m.start()] + + f'{m.group(1)}{entry}{eol}' + + config_content[m.start():]) + write_utf8_bom(parent_xml_path, new_content) + return 'added' + + close_same = f'' + last_same = config_content.rfind(close_same, block.start(), block.end()) + if last_same != -1: + # After the last element of the same type (keeps them grouped). + insert_at = last_same + len(close_same) + new_content = (config_content[:insert_at] + + f'{eol}\t\t\t{entry}' + + config_content[insert_at:]) + else: + # No element of this type yet: new line before , + # reusing the block's existing closing indent for . + close_at = config_content.rfind('', block.start(), block.end()) + new_content = (config_content[:close_at] + + f'\t{entry}{eol}\t\t' + + config_content[close_at:]) + write_utf8_bom(parent_xml_path, new_content) + return 'added' + + +config_xml = os.path.join(args.OutputDir, "Configuration.xml") +reg_result = register_in_childobjects(config_xml, "Configuration", "XDTOPackage", name) type_count = sum(1 for c in pkg_node.children if c.tag in ("objectType", "valueType")) print(f"✓ Пакет XDTO собран: {name}") @@ -1147,5 +1273,7 @@ if reg_result == "added": print(f" Configuration.xml: {name} добавлен в ChildObjects") elif reg_result == "already": print(f" Configuration.xml: {name} уже зарегистрирован") +elif reg_result == "no-childobj": + print("ПРЕДУПРЕЖДЕНИЕ: Configuration.xml найден, но не найден", file=sys.stderr) else: print(" Configuration.xml не найден — регистрация пропущена") diff --git a/.gitignore b/.gitignore index 6fd40ee79..5b0929e90 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,9 @@ __pycache__/ # Локальный реестр баз данных 1С .v8-project.json +# ...но в кейсах он — вход теста (настройка newObjectPosition), и эталон без него +# на чистом клоне не сойдётся с результатом прогона. +!tests/skills/cases/**/.v8-project.json # web-test: Node.js зависимости и runtime-артефакты .claude/skills/web-test/scripts/node_modules/ diff --git a/docs/v8-project-guide.md b/docs/v8-project-guide.md index 3a3df655c..7102d378b 100644 --- a/docs/v8-project-guide.md +++ b/docs/v8-project-guide.md @@ -80,6 +80,7 @@ | `databases` | array | да | — | Список баз данных | `/db-list add` | | `default` | string | нет | — | `id` базы по умолчанию | `/db-list` | | `editingAllowedCheck` | `"deny"`/`"warn"`/`"off"` | нет | `deny` | Глобальная реакция support-guard на правку объектов на замке (см. ниже) | Руками | +| `newObjectPosition` | `"end"`/`"byName"` | нет | `end` | Куда навыки ставят новый объект в `` (см. ниже) | Руками | | `skillSuggester` | `"on"`/`"off"` | нет | `on` | Подсказки навыков от хука skill-suggester (только если хук включён, см. ниже) | Руками | | `webPath` | string | нет | `tools/apache24` | Каталог Apache HTTP Server | Руками | | `ffmpegPath` | string | нет | `tools/ffmpeg/bin/ffmpeg.exe` | Путь к ffmpeg | Руками | @@ -101,6 +102,7 @@ | `branches` | string[] | нет | Git-ветки или glob-паттерны (`release/*`, `feature/*`) | Руками | | `configSrc` | string | нет | Каталог XML-выгрузки конфигурации (рекомендуется `src/cf`, см. структуру ниже). Путь относительный — от корня проекта | Руками | | `editingAllowedCheck` | `"deny"`/`"warn"`/`"off"` | нет | Override реакции support-guard для этой базы (см. ниже) | Руками | +| `newObjectPosition` | `"end"`/`"byName"` | нет | Override места вставки в `` для этой базы (см. ниже) | Руками | | `skillSuggester` | `"on"`/`"off"` | нет | Override подсказок навыков для этой базы (см. ниже) | Руками | | `webUrl` | string | нет | URL веб-клиента для `/web-test` | Руками | | `repository` | object | нет | Хранилище конфигурации: `path`, `user`, `password` (см. ниже) | Руками | @@ -150,6 +152,25 @@ Триггер проверки — наличие `ParentConfigurations.bin` (конфигурация на поддержке), а не регистрация в `.v8-project.json`. Поле лишь меняет реакцию. Берётся `databases[].editingAllowedCheck` базы, чей `configSrc` охватывает редактируемый путь; иначе — корневое `editingAllowedCheck`; иначе `deny`. +### Порядок объектов метаданных и `newObjectPosition` + +Объекты верхнего уровня перечислены в `` файла `Configuration.xml` — сначала группами по видам, внутри вида по одному на строку. Поле задаёт, куда навык ставит **новую** запись внутри своего вида: + +- `end` (по умолчанию, в том числе когда поле не задано) — после последнего объекта того же вида, как дописывает Конфигуратор; +- `byName` — по имени, как требует стандарт разработки для объектов верхнего уровня (АПК:1108 «Нарушена сортировка объектов метаданных верхнего уровня по имени по возрастанию в дереве метаданных», #std467 п. 2.3). + +Читают поле навыки, добавляющие запись в состав: `meta-compile`, `role-compile`, `xdto-compile`, `cfe-borrow` и операция `add-childObject` навыка `cf-edit`. Раскладка та же, что у `editingAllowedCheck`: берётся `databases[].newObjectPosition` базы, чей `configSrc` (относительно каталога `.v8-project.json`) охватывает каталог правимого файла; иначе корневое поле; иначе `end`. + +Сам файл `.v8-project.json` ищется вверх **от каталога конфигурации**, и лишь потом от текущего каталога — в отличие от `editingAllowedCheck`, который смотрит сначала на текущий каталог. Настройка принадлежит выгрузке: навык почти всегда вызывают из другого проекта, и его `.v8-project.json` перекрыл бы нужный. + +**Порядок имён** — как в дереве Конфигуратора: регистр не учитывается, подчёркивание раньше цифр, цифры раньше букв, латиница раньше кириллицы, `ё` на месте `е`. Сравнение реализовано ключом «ранг+символ», а не культурными таблицами ОС, поэтому PowerShell- и Python-порты дают одинаковый результат на любой платформе. + +**Подсистемы поле не затрагивает** — они всегда дописываются в конец. Порядок подсистем в дереве задаёт порядок разделов в панели, пока они не перечислены в `` файла `Ext/CommandInterface.xml`; сама платформа этот список не заводит, а `subsystem-compile` его не трогает (это работа `interface-edit`). Сортировка подсистем поэтому переставляла бы разделы интерфейса молча. + +**Что поле не делает.** Оно влияет только на новые записи и не приводит в порядок уже накопленное — для этого есть `/cf-edit -Operation sort-childObjects`. `byName` к тому же предполагает, что список уже упорядочен: объект встаёт перед первым объектом своего вида, чьё имя больше. Взаимный порядок групп видов навыки не меняют вовсе: платформа приводит его к своему при первой же выгрузке. + +**Виды с осмысленным порядком.** В типовых конфигурациях `CommandGroup`, `PaletteColor` и `Language` перечислены не по алфавиту — порядок там выбран разработчиком. Стандарт распространяется и на них, так что `byName` и сортировка этот порядок перебьют; на работу конфигурации это не влияет (проверено загрузкой и обратной выгрузкой), но диф будет. + ### Хуки и `skillSuggester` (экспериментально) Помимо встроенной в навыки проверки (выше), есть **опциональные хуки Claude Code** (каталог `hooks/`), которые по умолчанию **выключены** и подключаются вручную (см. `hooks/README.md`): diff --git a/tests/skills/cases/cf-edit/add-childobject-position-byname.json b/tests/skills/cases/cf-edit/add-childobject-position-byname.json new file mode 100644 index 000000000..f880afa77 --- /dev/null +++ b/tests/skills/cases/cf-edit/add-childobject-position-byname.json @@ -0,0 +1,23 @@ +{ + "name": "add-childObject при newObjectPosition=byName: объект возвращается на место по имени (список предварительно упорядочен)", + "setup": "fixture:unsorted-childobjects", + "preRun": [ + { "writeFile": { "path": ".v8-project.json", "content": { "newObjectPosition": "byName", "databases": [] } } }, + { + "script": "cf-edit/scripts/cf-edit", + "args": { "-ConfigPath": "{workDir}", "-Operation": "sort-childObjects", "-Value": "Catalog" } + }, + { + "script": "cf-edit/scripts/cf-edit", + "args": { "-ConfigPath": "{workDir}", "-Operation": "remove-childObject", "-Value": "Catalog.Бета" } + } + ], + "cwd": "workDir", + "input": [ { "operation": "add-childObject", "value": "Catalog.Бета" } ], + "expect": { + "fileContains": { + "file": "Configuration.xml", + "text": "Альфа\r\n\t\t\tБета\r\n\t\t\tГамма" + } + } +} diff --git a/tests/skills/cases/cf-edit/add-childobject-position-default-end.json b/tests/skills/cases/cf-edit/add-childobject-position-default-end.json new file mode 100644 index 000000000..13c134b84 --- /dev/null +++ b/tests/skills/cases/cf-edit/add-childobject-position-default-end.json @@ -0,0 +1,18 @@ +{ + "name": "add-childObject без настройки: объект дописывается в конец своего вида (дефолт end)", + "setup": "fixture:unsorted-childobjects", + "preRun": [ + { + "script": "cf-edit/scripts/cf-edit", + "args": { "-ConfigPath": "{workDir}", "-Operation": "remove-childObject", "-Value": "Catalog.Гамма" } + } + ], + "cwd": "workDir", + "input": [ { "operation": "add-childObject", "value": "Catalog.Гамма" } ], + "expect": { + "fileContains": { + "file": "Configuration.xml", + "text": "Альфа\r\n\t\t\tБета\r\n\t\t\tГамма" + } + } +} diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Альфа.xml b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Альфа.xml new file mode 100644 index 000000000..f94ca1874 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + 8767e815-a70c-4621-850e-af4b5e96f9cb + 3ab7c839-344a-4721-af3e-2c7eec4dc1df + + + f6449478-3c27-433d-ad66-5a6292bc43e2 + 65e14da8-63cc-434a-964a-cdc0db5171fe + + + 319b36bf-9694-46d9-a20a-2b0d68bae20a + 9617ec46-b675-4f0a-8ef8-8f9072eb9ff7 + + + 90426981-0d78-4c95-81de-a05a026059fc + 00008d1e-5443-4ccc-8adc-0dd53151d98a + + + bf0ccada-bae5-463c-bd06-643bf910169a + 05743667-fb61-40f6-91c5-a8118273b859 + + + + Альфа + + + ru + Альфа + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Альфа/Ext/ObjectModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Бета.xml b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Бета.xml new file mode 100644 index 000000000..26086a491 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Бета.xml @@ -0,0 +1,91 @@ + + + + + + ab0e1ac5-bd9c-4437-8fd1-3f1a9d2a896f + 74439b17-55ba-4b69-aa75-98efb15a162b + + + f89dfe45-3348-4974-ac72-c8f29390aa05 + c1a6b775-11c6-49c7-bf84-b98d5abb35fa + + + 13d8d001-a088-4b1b-a4fe-ca43bce34944 + 312e04c6-f482-40ae-844d-26bc6ae865df + + + 602d464e-76f1-4524-b607-6d6ea8d239d2 + 53241cf5-67b1-48b6-9e17-844ed5d8a1b0 + + + 505ea7c4-faea-483a-8259-85ecca5b984b + 864963c8-83b0-4688-9ac5-b484312da14b + + + + Бета + + + ru + Бета + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Бета/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Бета/Ext/ObjectModule.bsl new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Бета/Ext/ObjectModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Гамма.xml b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Гамма.xml new file mode 100644 index 000000000..5b70ca26a --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + e512ecb9-9a4e-4284-b1a9-a94e74c34dab + 092a2704-df26-4534-9e6d-6d80a3ec5e43 + + + 58b89099-41de-4df3-8ee6-08e3bb100330 + 547d03fe-fc29-4355-ad69-2599cf2adae9 + + + 7b555e9f-3b94-43a1-971b-b06cf5ead88e + c4bf0d0a-3196-4129-856c-6bc76e4bae27 + + + 1868fd29-da40-42a2-987d-8fd6bc370583 + fdbcaea7-a1cc-4e0d-9d68-d2faf3371607 + + + 8e5cddfd-80b8-4ad2-b635-6f189f7ff500 + 03b2993a-1381-4385-846b-2fd39b127e05 + + + + Гамма + + + ru + Гамма + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Catalogs/Гамма/Ext/ObjectModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Configuration.xml b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Configuration.xml new file mode 100644 index 000000000..c075fa623 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Configuration.xml @@ -0,0 +1,258 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + 5fce13cc-2cd4-45c8-a718-6f27a3f43165 + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + 7c720307-b486-4198-803d-e1c42b084f62 + + + e3687481-0a87-462c-a166-9f34594f9bba + 1d78e496-815d-49b4-a759-d7232cf040a3 + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + e3fbb828-4b17-43f6-8ee8-c22177a67661 + + + 51f2d5d8-ea4d-4064-8892-82951750031e + 86d28421-1d3c-4c1f-916d-91b7c9854f62 + + + e68182ea-4237-4383-967f-90c1e3370bc7 + 1870382d-fb41-4664-b48d-26fc1b307d7c + + + fb282519-d103-4dd3-bc12-cb271d631dfc + 5014803b-ce4a-4495-a86c-489ca10992a1 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Гамма + Альфа + Бета + Омега + Каппа + Яблоко + Банан + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..f3ada1e76 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + cbab57f2-a0f3-4f0a-89ea-4cb19570ab75 + + + + + b553047f-c9aa-4157-978d-448ecad24248 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Languages/Русский.xml b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Languages/Русский.xml new file mode 100644 index 000000000..a6aeee835 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Roles/Каппа.xml b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Roles/Каппа.xml new file mode 100644 index 000000000..5cd67c677 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Roles/Каппа.xml @@ -0,0 +1,15 @@ + + + + + Каппа + + + ru + Каппа + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Roles/Каппа/Ext/Rights.xml b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Roles/Каппа/Ext/Rights.xml new file mode 100644 index 000000000..57814e857 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Roles/Каппа/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Roles/Омега.xml b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Roles/Омега.xml new file mode 100644 index 000000000..f1fdd8479 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Roles/Омега.xml @@ -0,0 +1,15 @@ + + + + + Омега + + + ru + Омега + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Roles/Омега/Ext/Rights.xml b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Roles/Омега/Ext/Rights.xml new file mode 100644 index 000000000..57814e857 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Roles/Омега/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Subsystems/Банан.xml b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Subsystems/Банан.xml new file mode 100644 index 000000000..811af082f --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Subsystems/Банан.xml @@ -0,0 +1,22 @@ + + + + + Банан + + + ru + Банан + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Subsystems/Яблоко.xml b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Subsystems/Яблоко.xml new file mode 100644 index 000000000..d953113f2 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/noncanonical-header/Subsystems/Яблоко.xml @@ -0,0 +1,22 @@ + + + + + Яблоко + + + ru + Яблоко + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Альфа.xml b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Альфа.xml new file mode 100644 index 000000000..f94ca1874 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + 8767e815-a70c-4621-850e-af4b5e96f9cb + 3ab7c839-344a-4721-af3e-2c7eec4dc1df + + + f6449478-3c27-433d-ad66-5a6292bc43e2 + 65e14da8-63cc-434a-964a-cdc0db5171fe + + + 319b36bf-9694-46d9-a20a-2b0d68bae20a + 9617ec46-b675-4f0a-8ef8-8f9072eb9ff7 + + + 90426981-0d78-4c95-81de-a05a026059fc + 00008d1e-5443-4ccc-8adc-0dd53151d98a + + + bf0ccada-bae5-463c-bd06-643bf910169a + 05743667-fb61-40f6-91c5-a8118273b859 + + + + Альфа + + + ru + Альфа + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Альфа/Ext/ObjectModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Бета.xml b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Бета.xml new file mode 100644 index 000000000..26086a491 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Бета.xml @@ -0,0 +1,91 @@ + + + + + + ab0e1ac5-bd9c-4437-8fd1-3f1a9d2a896f + 74439b17-55ba-4b69-aa75-98efb15a162b + + + f89dfe45-3348-4974-ac72-c8f29390aa05 + c1a6b775-11c6-49c7-bf84-b98d5abb35fa + + + 13d8d001-a088-4b1b-a4fe-ca43bce34944 + 312e04c6-f482-40ae-844d-26bc6ae865df + + + 602d464e-76f1-4524-b607-6d6ea8d239d2 + 53241cf5-67b1-48b6-9e17-844ed5d8a1b0 + + + 505ea7c4-faea-483a-8259-85ecca5b984b + 864963c8-83b0-4688-9ac5-b484312da14b + + + + Бета + + + ru + Бета + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Бета/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Бета/Ext/ObjectModule.bsl new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Бета/Ext/ObjectModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Гамма.xml b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Гамма.xml new file mode 100644 index 000000000..5b70ca26a --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + e512ecb9-9a4e-4284-b1a9-a94e74c34dab + 092a2704-df26-4534-9e6d-6d80a3ec5e43 + + + 58b89099-41de-4df3-8ee6-08e3bb100330 + 547d03fe-fc29-4355-ad69-2599cf2adae9 + + + 7b555e9f-3b94-43a1-971b-b06cf5ead88e + c4bf0d0a-3196-4129-856c-6bc76e4bae27 + + + 1868fd29-da40-42a2-987d-8fd6bc370583 + fdbcaea7-a1cc-4e0d-9d68-d2faf3371607 + + + 8e5cddfd-80b8-4ad2-b635-6f189f7ff500 + 03b2993a-1381-4385-846b-2fd39b127e05 + + + + Гамма + + + ru + Гамма + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Catalogs/Гамма/Ext/ObjectModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Configuration.xml b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Configuration.xml new file mode 100644 index 000000000..7cdbc68f7 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Configuration.xml @@ -0,0 +1,258 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + 5fce13cc-2cd4-45c8-a718-6f27a3f43165 + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + 7c720307-b486-4198-803d-e1c42b084f62 + + + e3687481-0a87-462c-a166-9f34594f9bba + 1d78e496-815d-49b4-a759-d7232cf040a3 + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + e3fbb828-4b17-43f6-8ee8-c22177a67661 + + + 51f2d5d8-ea4d-4064-8892-82951750031e + 86d28421-1d3c-4c1f-916d-91b7c9854f62 + + + e68182ea-4237-4383-967f-90c1e3370bc7 + 1870382d-fb41-4664-b48d-26fc1b307d7c + + + fb282519-d103-4dd3-bc12-cb271d631dfc + 5014803b-ce4a-4495-a86c-489ca10992a1 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Гамма + Альфа + Бета + Омега + Каппа + Яблоко + Банан + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..f3ada1e76 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + cbab57f2-a0f3-4f0a-89ea-4cb19570ab75 + + + + + b553047f-c9aa-4157-978d-448ecad24248 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Languages/Русский.xml b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Languages/Русский.xml new file mode 100644 index 000000000..a6aeee835 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Roles/Каппа.xml b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Roles/Каппа.xml new file mode 100644 index 000000000..5cd67c677 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Roles/Каппа.xml @@ -0,0 +1,15 @@ + + + + + Каппа + + + ru + Каппа + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Roles/Каппа/Ext/Rights.xml b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Roles/Каппа/Ext/Rights.xml new file mode 100644 index 000000000..57814e857 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Roles/Каппа/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Roles/Омега.xml b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Roles/Омега.xml new file mode 100644 index 000000000..f1fdd8479 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Roles/Омега.xml @@ -0,0 +1,15 @@ + + + + + Омега + + + ru + Омега + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Roles/Омега/Ext/Rights.xml b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Roles/Омега/Ext/Rights.xml new file mode 100644 index 000000000..57814e857 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Roles/Омега/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Subsystems/Банан.xml b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Subsystems/Банан.xml new file mode 100644 index 000000000..811af082f --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Subsystems/Банан.xml @@ -0,0 +1,22 @@ + + + + + Банан + + + ru + Банан + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Subsystems/Яблоко.xml b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Subsystems/Яблоко.xml new file mode 100644 index 000000000..d953113f2 --- /dev/null +++ b/tests/skills/cases/cf-edit/fixtures/unsorted-childobjects/Subsystems/Яблоко.xml @@ -0,0 +1,22 @@ + + + + + Яблоко + + + ru + Яблоко + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/.v8-project.json b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/.v8-project.json new file mode 100644 index 000000000..6f0c98b6e --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/.v8-project.json @@ -0,0 +1,4 @@ +{ + "newObjectPosition": "byName", + "databases": [] +} \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Альфа.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Альфа.xml new file mode 100644 index 000000000..ba2d5fde3 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Альфа + + + ru + Альфа + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Бета.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Бета.xml new file mode 100644 index 000000000..e1363c902 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Бета.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Бета + + + ru + Бета + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Бета/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Бета/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Гамма.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Гамма.xml new file mode 100644 index 000000000..7279f86fd --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Гамма + + + ru + Гамма + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Configuration.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Configuration.xml new file mode 100644 index 000000000..9625bf844 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Configuration.xml @@ -0,0 +1,258 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Альфа + Бета + Гамма + Омега + Каппа + Яблоко + Банан + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Languages/Русский.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Roles/Каппа.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Roles/Каппа.xml new file mode 100644 index 000000000..ebe12a305 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Roles/Каппа.xml @@ -0,0 +1,15 @@ + + + + + Каппа + + + ru + Каппа + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Roles/Каппа/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Roles/Каппа/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Roles/Каппа/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Roles/Омега.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Roles/Омега.xml new file mode 100644 index 000000000..cf51b12fa --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Roles/Омега.xml @@ -0,0 +1,15 @@ + + + + + Омега + + + ru + Омега + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Roles/Омега/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Roles/Омега/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Roles/Омега/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Subsystems/Банан.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Subsystems/Банан.xml new file mode 100644 index 000000000..702671249 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Subsystems/Банан.xml @@ -0,0 +1,22 @@ + + + + + Банан + + + ru + Банан + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Subsystems/Яблоко.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Subsystems/Яблоко.xml new file mode 100644 index 000000000..e24806b55 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-byname/Subsystems/Яблоко.xml @@ -0,0 +1,22 @@ + + + + + Яблоко + + + ru + Яблоко + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Альфа.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Альфа.xml new file mode 100644 index 000000000..ba2d5fde3 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Альфа + + + ru + Альфа + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Бета.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Бета.xml new file mode 100644 index 000000000..e1363c902 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Бета.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Бета + + + ru + Бета + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Бета/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Бета/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Гамма.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Гамма.xml new file mode 100644 index 000000000..7279f86fd --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Гамма + + + ru + Гамма + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Configuration.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Configuration.xml new file mode 100644 index 000000000..9625bf844 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Configuration.xml @@ -0,0 +1,258 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Альфа + Бета + Гамма + Омега + Каппа + Яблоко + Банан + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Languages/Русский.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Roles/Каппа.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Roles/Каппа.xml new file mode 100644 index 000000000..ebe12a305 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Roles/Каппа.xml @@ -0,0 +1,15 @@ + + + + + Каппа + + + ru + Каппа + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Roles/Каппа/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Roles/Каппа/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Roles/Каппа/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Roles/Омега.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Roles/Омега.xml new file mode 100644 index 000000000..cf51b12fa --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Roles/Омега.xml @@ -0,0 +1,15 @@ + + + + + Омега + + + ru + Омега + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Roles/Омега/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Roles/Омега/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Roles/Омега/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Subsystems/Банан.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Subsystems/Банан.xml new file mode 100644 index 000000000..702671249 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Subsystems/Банан.xml @@ -0,0 +1,22 @@ + + + + + Банан + + + ru + Банан + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Subsystems/Яблоко.xml b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Subsystems/Яблоко.xml new file mode 100644 index 000000000..e24806b55 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/add-childobject-position-default-end/Subsystems/Яблоко.xml @@ -0,0 +1,22 @@ + + + + + Яблоко + + + ru + Яблоко + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Альфа.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Альфа.xml new file mode 100644 index 000000000..ba2d5fde3 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Альфа + + + ru + Альфа + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Бета.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Бета.xml new file mode 100644 index 000000000..e1363c902 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Бета.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Бета + + + ru + Бета + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Бета/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Бета/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Гамма.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Гамма.xml new file mode 100644 index 000000000..7279f86fd --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Гамма + + + ru + Гамма + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Configuration.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Configuration.xml new file mode 100644 index 000000000..ebc99022d --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Configuration.xml @@ -0,0 +1,258 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Альфа + Бета + Гамма + Каппа + Омега + Яблоко + Банан + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Languages/Русский.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Roles/Каппа.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Roles/Каппа.xml new file mode 100644 index 000000000..ebe12a305 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Roles/Каппа.xml @@ -0,0 +1,15 @@ + + + + + Каппа + + + ru + Каппа + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Roles/Каппа/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Roles/Каппа/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Roles/Каппа/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Roles/Омега.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Roles/Омега.xml new file mode 100644 index 000000000..cf51b12fa --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Roles/Омега.xml @@ -0,0 +1,15 @@ + + + + + Омега + + + ru + Омега + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Roles/Омега/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Roles/Омега/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Roles/Омега/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Subsystems/Банан.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Subsystems/Банан.xml new file mode 100644 index 000000000..702671249 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Subsystems/Банан.xml @@ -0,0 +1,22 @@ + + + + + Банан + + + ru + Банан + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Subsystems/Яблоко.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Subsystems/Яблоко.xml new file mode 100644 index 000000000..e24806b55 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-all/Subsystems/Яблоко.xml @@ -0,0 +1,22 @@ + + + + + Яблоко + + + ru + Яблоко + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Альфа.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Альфа.xml new file mode 100644 index 000000000..ba2d5fde3 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Альфа + + + ru + Альфа + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Бета.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Бета.xml new file mode 100644 index 000000000..e1363c902 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Бета.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Бета + + + ru + Бета + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Бета/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Бета/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Гамма.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Гамма.xml new file mode 100644 index 000000000..7279f86fd --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Гамма + + + ru + Гамма + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Configuration.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Configuration.xml new file mode 100644 index 000000000..ebc99022d --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Configuration.xml @@ -0,0 +1,258 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Альфа + Бета + Гамма + Каппа + Омега + Яблоко + Банан + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Languages/Русский.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Roles/Каппа.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Roles/Каппа.xml new file mode 100644 index 000000000..ebe12a305 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Roles/Каппа.xml @@ -0,0 +1,15 @@ + + + + + Каппа + + + ru + Каппа + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Roles/Каппа/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Roles/Каппа/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Roles/Каппа/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Roles/Омега.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Roles/Омега.xml new file mode 100644 index 000000000..cf51b12fa --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Roles/Омега.xml @@ -0,0 +1,15 @@ + + + + + Омега + + + ru + Омега + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Roles/Омега/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Roles/Омега/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Roles/Омега/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Subsystems/Банан.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Subsystems/Банан.xml new file mode 100644 index 000000000..702671249 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Subsystems/Банан.xml @@ -0,0 +1,22 @@ + + + + + Банан + + + ru + Банан + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Subsystems/Яблоко.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Subsystems/Яблоко.xml new file mode 100644 index 000000000..e24806b55 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-idempotent/Subsystems/Яблоко.xml @@ -0,0 +1,22 @@ + + + + + Яблоко + + + ru + Яблоко + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Альфа.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Альфа.xml new file mode 100644 index 000000000..ba2d5fde3 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Альфа + + + ru + Альфа + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Бета.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Бета.xml new file mode 100644 index 000000000..e1363c902 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Бета.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Бета + + + ru + Бета + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Бета/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Бета/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Гамма.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Гамма.xml new file mode 100644 index 000000000..7279f86fd --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Гамма + + + ru + Гамма + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Configuration.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Configuration.xml new file mode 100644 index 000000000..9625bf844 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Configuration.xml @@ -0,0 +1,258 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Альфа + Бета + Гамма + Омега + Каппа + Яблоко + Банан + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Languages/Русский.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Roles/Каппа.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Roles/Каппа.xml new file mode 100644 index 000000000..ebe12a305 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Roles/Каппа.xml @@ -0,0 +1,15 @@ + + + + + Каппа + + + ru + Каппа + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Roles/Каппа/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Roles/Каппа/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Roles/Каппа/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Roles/Омега.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Roles/Омега.xml new file mode 100644 index 000000000..cf51b12fa --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Roles/Омега.xml @@ -0,0 +1,15 @@ + + + + + Омега + + + ru + Омега + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Roles/Омега/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Roles/Омега/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Roles/Омега/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Subsystems/Банан.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Subsystems/Банан.xml new file mode 100644 index 000000000..702671249 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Subsystems/Банан.xml @@ -0,0 +1,22 @@ + + + + + Банан + + + ru + Банан + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Subsystems/Яблоко.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Subsystems/Яблоко.xml new file mode 100644 index 000000000..e24806b55 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-lenient-type/Subsystems/Яблоко.xml @@ -0,0 +1,22 @@ + + + + + Яблоко + + + ru + Яблоко + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Альфа.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Альфа.xml new file mode 100644 index 000000000..ba2d5fde3 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Альфа + + + ru + Альфа + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Бета.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Бета.xml new file mode 100644 index 000000000..e1363c902 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Бета.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Бета + + + ru + Бета + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Бета/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Бета/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Гамма.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Гамма.xml new file mode 100644 index 000000000..7279f86fd --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Гамма + + + ru + Гамма + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Configuration.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Configuration.xml new file mode 100644 index 000000000..9625bf844 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Configuration.xml @@ -0,0 +1,258 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Альфа + Бета + Гамма + Омега + Каппа + Яблоко + Банан + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Languages/Русский.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Roles/Каппа.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Roles/Каппа.xml new file mode 100644 index 000000000..ebe12a305 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Roles/Каппа.xml @@ -0,0 +1,15 @@ + + + + + Каппа + + + ru + Каппа + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Roles/Каппа/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Roles/Каппа/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Roles/Каппа/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Roles/Омега.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Roles/Омега.xml new file mode 100644 index 000000000..cf51b12fa --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Roles/Омега.xml @@ -0,0 +1,15 @@ + + + + + Омега + + + ru + Омега + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Roles/Омега/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Roles/Омега/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Roles/Омега/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Subsystems/Банан.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Subsystems/Банан.xml new file mode 100644 index 000000000..702671249 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Subsystems/Банан.xml @@ -0,0 +1,22 @@ + + + + + Банан + + + ru + Банан + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Subsystems/Яблоко.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Subsystems/Яблоко.xml new file mode 100644 index 000000000..e24806b55 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-one-type/Subsystems/Яблоко.xml @@ -0,0 +1,22 @@ + + + + + Яблоко + + + ru + Яблоко + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Альфа.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Альфа.xml new file mode 100644 index 000000000..ba2d5fde3 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Альфа + + + ru + Альфа + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Бета.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Бета.xml new file mode 100644 index 000000000..e1363c902 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Бета.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Бета + + + ru + Бета + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Бета/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Бета/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Гамма.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Гамма.xml new file mode 100644 index 000000000..7279f86fd --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Гамма + + + ru + Гамма + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Configuration.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Configuration.xml new file mode 100644 index 000000000..5a36fcb90 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Configuration.xml @@ -0,0 +1,258 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Альфа + Бета + Гамма + Омега + Каппа + Яблоко + Банан + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Languages/Русский.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Roles/Каппа.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Roles/Каппа.xml new file mode 100644 index 000000000..ebe12a305 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Roles/Каппа.xml @@ -0,0 +1,15 @@ + + + + + Каппа + + + ru + Каппа + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Roles/Каппа/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Roles/Каппа/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Roles/Каппа/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Roles/Омега.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Roles/Омега.xml new file mode 100644 index 000000000..cf51b12fa --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Roles/Омега.xml @@ -0,0 +1,15 @@ + + + + + Омега + + + ru + Омега + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Roles/Омега/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Roles/Омега/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Roles/Омега/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Subsystems/Банан.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Subsystems/Банан.xml new file mode 100644 index 000000000..702671249 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Subsystems/Банан.xml @@ -0,0 +1,22 @@ + + + + + Банан + + + ru + Банан + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Subsystems/Яблоко.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Subsystems/Яблоко.xml new file mode 100644 index 000000000..e24806b55 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-preserves-header/Subsystems/Яблоко.xml @@ -0,0 +1,22 @@ + + + + + Яблоко + + + ru + Яблоко + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Альфа.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Альфа.xml new file mode 100644 index 000000000..ba2d5fde3 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Альфа + + + ru + Альфа + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Бета.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Бета.xml new file mode 100644 index 000000000..e1363c902 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Бета.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Бета + + + ru + Бета + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Бета/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Бета/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Гамма.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Гамма.xml new file mode 100644 index 000000000..7279f86fd --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Гамма + + + ru + Гамма + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Configuration.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Configuration.xml new file mode 100644 index 000000000..e1e9ada12 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Configuration.xml @@ -0,0 +1,258 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Гамма + Альфа + Бета + Омега + Каппа + Банан + Яблоко + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Languages/Русский.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Roles/Каппа.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Roles/Каппа.xml new file mode 100644 index 000000000..ebe12a305 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Roles/Каппа.xml @@ -0,0 +1,15 @@ + + + + + Каппа + + + ru + Каппа + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Roles/Каппа/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Roles/Каппа/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Roles/Каппа/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Roles/Омега.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Roles/Омега.xml new file mode 100644 index 000000000..cf51b12fa --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Roles/Омега.xml @@ -0,0 +1,15 @@ + + + + + Омега + + + ru + Омега + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Roles/Омега/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Roles/Омега/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Roles/Омега/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Subsystems/Банан.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Subsystems/Банан.xml new file mode 100644 index 000000000..702671249 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Subsystems/Банан.xml @@ -0,0 +1,22 @@ + + + + + Банан + + + ru + Банан + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Subsystems/Яблоко.xml b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Subsystems/Яблоко.xml new file mode 100644 index 000000000..e24806b55 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/sort-childobjects-subsystem-explicit/Subsystems/Яблоко.xml @@ -0,0 +1,22 @@ + + + + + Яблоко + + + ru + Яблоко + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Альфа.xml b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Альфа.xml new file mode 100644 index 000000000..ba2d5fde3 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Альфа + + + ru + Альфа + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Бета.xml b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Бета.xml new file mode 100644 index 000000000..e1363c902 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Бета.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Бета + + + ru + Бета + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Бета/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Бета/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Гамма.xml b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Гамма.xml new file mode 100644 index 000000000..7279f86fd --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Гамма + + + ru + Гамма + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Configuration.xml b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Configuration.xml new file mode 100644 index 000000000..c008f0688 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Configuration.xml @@ -0,0 +1,257 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Альфа + Гамма + Омега + Каппа + Яблоко + Банан + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Languages/Русский.xml b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Roles/Каппа.xml b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Roles/Каппа.xml new file mode 100644 index 000000000..ebe12a305 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Roles/Каппа.xml @@ -0,0 +1,15 @@ + + + + + Каппа + + + ru + Каппа + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Roles/Каппа/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Roles/Каппа/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Roles/Каппа/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Roles/Омега.xml b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Roles/Омега.xml new file mode 100644 index 000000000..cf51b12fa --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Roles/Омега.xml @@ -0,0 +1,15 @@ + + + + + Омега + + + ru + Омега + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Roles/Омега/Ext/Rights.xml b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Roles/Омега/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Roles/Омега/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Subsystems/Банан.xml b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Subsystems/Банан.xml new file mode 100644 index 000000000..702671249 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Subsystems/Банан.xml @@ -0,0 +1,22 @@ + + + + + Банан + + + ru + Банан + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/snapshots/type-name-russian/Subsystems/Яблоко.xml b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Subsystems/Яблоко.xml new file mode 100644 index 000000000..e24806b55 --- /dev/null +++ b/tests/skills/cases/cf-edit/snapshots/type-name-russian/Subsystems/Яблоко.xml @@ -0,0 +1,22 @@ + + + + + Яблоко + + + ru + Яблоко + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-edit/sort-childobjects-all.json b/tests/skills/cases/cf-edit/sort-childobjects-all.json new file mode 100644 index 000000000..c0028728b --- /dev/null +++ b/tests/skills/cases/cf-edit/sort-childobjects-all.json @@ -0,0 +1,29 @@ +{ + "name": "sort-childObjects без значения: справочники и роли упорядочены, подсистемы не тронуты", + "setup": "fixture:unsorted-childobjects", + "input": [ + { + "operation": "sort-childObjects" + } + ], + "expect": { + "stdoutContains": [ + "Sorted: Catalog (3)", + "Sorted: Role (2)" + ], + "fileContains": { + "file": "Configuration.xml", + "text": "Альфа\r\n\t\t\tБета\r\n\t\t\tГамма\r\n\t\t\tКаппа\r\n\t\t\tОмега\r\n\t\t\tЯблоко\r\n\t\t\tБанан" + }, + "preserves": { + "file": "Configuration.xml", + "bom": true, + "eol": "crlf", + "encoding": "UTF-8", + "finalNewline": false, + "noCR13": true, + "selfClose": "tight", + "noEmptyPairs": true + } + } +} diff --git a/tests/skills/cases/cf-edit/sort-childobjects-idempotent.json b/tests/skills/cases/cf-edit/sort-childobjects-idempotent.json new file mode 100644 index 000000000..1b03f00e3 --- /dev/null +++ b/tests/skills/cases/cf-edit/sort-childobjects-idempotent.json @@ -0,0 +1,18 @@ +{ + "name": "sort-childObjects идемпотентна: повторный прогон на упорядоченном файле ничего не меняет", + "setup": "fixture:unsorted-childobjects", + "preRun": [ + { + "script": "cf-edit/scripts/cf-edit", + "args": { "-ConfigPath": "{workDir}", "-Operation": "sort-childObjects" } + } + ], + "input": [ { "operation": "sort-childObjects" } ], + "expect": { + "stdoutContains": ["Modified: 0"], + "fileContains": { + "file": "Configuration.xml", + "text": "Альфа\r\n\t\t\tБета\r\n\t\t\tГамма" + } + } +} diff --git a/tests/skills/cases/cf-edit/sort-childobjects-lenient-type.json b/tests/skills/cases/cf-edit/sort-childobjects-lenient-type.json new file mode 100644 index 000000000..b81229949 --- /dev/null +++ b/tests/skills/cases/cf-edit/sort-childobjects-lenient-type.json @@ -0,0 +1,12 @@ +{ + "name": "sort-childObjects принимает вид в любом регистре и во множественном числе (как каталог выгрузки)", + "setup": "fixture:unsorted-childobjects", + "input": [ { "operation": "sort-childObjects", "value": "catalogs" } ], + "expect": { + "stdoutContains": ["Sorted: Catalog (3)"], + "fileContains": { + "file": "Configuration.xml", + "text": "Альфа\r\n\t\t\tБета\r\n\t\t\tГамма" + } + } +} diff --git a/tests/skills/cases/cf-edit/sort-childobjects-one-type.json b/tests/skills/cases/cf-edit/sort-childobjects-one-type.json new file mode 100644 index 000000000..08ffa343b --- /dev/null +++ b/tests/skills/cases/cf-edit/sort-childobjects-one-type.json @@ -0,0 +1,11 @@ +{ + "name": "sort-childObjects с видом: сортируется только он, остальные виды остаются как были", + "setup": "fixture:unsorted-childobjects", + "input": [ { "operation": "sort-childObjects", "value": "Catalog" } ], + "expect": { + "fileContains": { + "file": "Configuration.xml", + "text": "Альфа\r\n\t\t\tБета\r\n\t\t\tГамма\r\n\t\t\tОмега\r\n\t\t\tКаппа" + } + } +} diff --git a/tests/skills/cases/cf-edit/sort-childobjects-preserves-header.json b/tests/skills/cases/cf-edit/sort-childobjects-preserves-header.json new file mode 100644 index 000000000..37990cd42 --- /dev/null +++ b/tests/skills/cases/cf-edit/sort-childobjects-preserves-header.json @@ -0,0 +1,12 @@ +{ + "name": "sort-childObjects на выгрузке не в каноне: регистр encoding наследуется от исходника (самозакрытие при этом канонизируется обоими портами)", + "setup": "fixture:noncanonical-header", + "input": [ { "operation": "sort-childObjects", "value": "Catalog" } ], + "expect": { + "fileContains": [ + { "file": "Configuration.xml", "text": "" }, + { "file": "Configuration.xml", "text": "" }, + { "file": "Configuration.xml", "text": "Альфа\r\n\t\t\tБета\r\n\t\t\tГамма" } + ] + } +} diff --git a/tests/skills/cases/cf-edit/sort-childobjects-subsystem-explicit.json b/tests/skills/cases/cf-edit/sort-childobjects-subsystem-explicit.json new file mode 100644 index 000000000..af9dac022 --- /dev/null +++ b/tests/skills/cases/cf-edit/sort-childobjects-subsystem-explicit.json @@ -0,0 +1,11 @@ +{ + "name": "sort-childObjects Subsystem: явно названный вид сортируется, несмотря на исключение по умолчанию", + "setup": "fixture:unsorted-childobjects", + "input": [ { "operation": "sort-childObjects", "value": "Subsystem" } ], + "expect": { + "fileContains": { + "file": "Configuration.xml", + "text": "Банан\r\n\t\t\tЯблоко" + } + } +} diff --git a/tests/skills/cases/cf-edit/sort-childobjects-unknown-type.json b/tests/skills/cases/cf-edit/sort-childobjects-unknown-type.json new file mode 100644 index 000000000..28fb8177f --- /dev/null +++ b/tests/skills/cases/cf-edit/sort-childobjects-unknown-type.json @@ -0,0 +1,7 @@ +{ + "name": "sort-childObjects с несуществующим видом — отказ со списком допустимых, а не тихий пропуск", + "setup": "fixture:unsorted-childobjects", + "input": [ { "operation": "sort-childObjects", "value": "НетТакогоВида" } ], + "expectError": true, + "expect": { "stderrContains": ["Unknown type 'НетТакогоВида'", "Valid: Language, Subsystem"] } +} diff --git a/tests/skills/cases/cf-edit/type-name-russian.json b/tests/skills/cases/cf-edit/type-name-russian.json new file mode 100644 index 000000000..090048d21 --- /dev/null +++ b/tests/skills/cases/cf-edit/type-name-russian.json @@ -0,0 +1,15 @@ +{ + "name": "Имя вида принимается по-русски: sort-childObjects «Справочники» и remove-childObject «Справочник.Бета»", + "setup": "fixture:unsorted-childobjects", + "input": [ + { "operation": "sort-childObjects", "value": "Справочники" }, + { "operation": "remove-childObject", "value": "Справочник.Бета" } + ], + "expect": { + "stdoutContains": ["Sorted: Catalog (3)", "Removed: Catalog.Бета"], + "fileContains": { + "file": "Configuration.xml", + "text": "Альфа\r\n\t\t\tГамма" + } + } +} diff --git a/tests/skills/cases/cfe-borrow/newobjectposition-byname.json b/tests/skills/cases/cfe-borrow/newobjectposition-byname.json new file mode 100644 index 000000000..5f2c7af81 --- /dev/null +++ b/tests/skills/cases/cfe-borrow/newobjectposition-byname.json @@ -0,0 +1,27 @@ +{ + "name": "newObjectPosition=byName: заимствованный объект встаёт в расширении по имени, а не в порядке заимствования", + "preRun": [ + { + "script": "meta-compile/scripts/meta-compile", + "input": { "type": "Catalog", "name": "Договоры" }, + "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } + }, + { + "script": "meta-compile/scripts/meta-compile", + "input": { "type": "Catalog", "name": "Терминалы", "owners": ["Catalog.Договоры"] }, + "args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" } + }, + { + "script": "cfe-init/scripts/cfe-init", + "args": { "-Name": "Тест", "-OutputDir": "{workDir}/cfe", "-ConfigPath": "{workDir}" } + }, + { "writeFile": { "path": "cfe/.v8-project.json", "content": { "newObjectPosition": "byName", "databases": [] } } } + ], + "params": { "extensionPath": "cfe", "object": "Catalog.Терминалы" }, + "expect": { + "fileContains": { + "file": "cfe/Configuration.xml", + "text": "Договоры\r\n\t\t\tТерминалы" + } + } +} diff --git a/tests/skills/cases/cfe-borrow/snapshots/catalog-with-owner/cfe/Configuration.xml b/tests/skills/cases/cfe-borrow/snapshots/catalog-with-owner/cfe/Configuration.xml index d54c28dfd..beea2f1c7 100644 --- a/tests/skills/cases/cfe-borrow/snapshots/catalog-with-owner/cfe/Configuration.xml +++ b/tests/skills/cases/cfe-borrow/snapshots/catalog-with-owner/cfe/Configuration.xml @@ -66,8 +66,8 @@ Русский Тест_ОсновнаяРоль - Договоры Терминалы + Договоры \ No newline at end of file diff --git a/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Catalogs/Договоры.xml b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Catalogs/Договоры.xml new file mode 100644 index 000000000..64ad5d710 --- /dev/null +++ b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Catalogs/Договоры.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Договоры + + + ru + Договоры + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Catalogs/Договоры/Ext/ObjectModule.bsl b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Catalogs/Договоры/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Catalogs/Терминалы.xml b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Catalogs/Терминалы.xml new file mode 100644 index 000000000..1bcfa332a --- /dev/null +++ b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Catalogs/Терминалы.xml @@ -0,0 +1,93 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Терминалы + + + ru + Терминалы + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + Catalog.Договоры + + ToItems + 9 + 25 + String + Variable + WholeCatalog + false + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.Терминалы.StandardAttribute.Description + Catalog.Терминалы.StandardAttribute.Code + + Begin + DontUse + Directly + + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Catalogs/Терминалы/Ext/ObjectModule.bsl b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Catalogs/Терминалы/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Configuration.xml b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Configuration.xml new file mode 100644 index 000000000..b8cb02e6a --- /dev/null +++ b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Configuration.xml @@ -0,0 +1,253 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Договоры + Терминалы + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Languages/Русский.xml b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/.v8-project.json b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/.v8-project.json new file mode 100644 index 000000000..6f0c98b6e --- /dev/null +++ b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/.v8-project.json @@ -0,0 +1,4 @@ +{ + "newObjectPosition": "byName", + "databases": [] +} \ No newline at end of file diff --git a/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Catalogs/Договоры.xml b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Catalogs/Договоры.xml new file mode 100644 index 000000000..4784383bf --- /dev/null +++ b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Catalogs/Договоры.xml @@ -0,0 +1,34 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Adopted + Договоры + + UUID-012 + + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Catalogs/Терминалы.xml b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Catalogs/Терминалы.xml new file mode 100644 index 000000000..b67fee7e7 --- /dev/null +++ b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Catalogs/Терминалы.xml @@ -0,0 +1,35 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Adopted + Терминалы + + UUID-012 + Catalog.Договоры + + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Configuration.xml b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Configuration.xml new file mode 100644 index 000000000..d54c28dfd --- /dev/null +++ b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Configuration.xml @@ -0,0 +1,73 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + Adopted + Тест + + + ru + Тест + + + + Customization + true + Тест_ + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + Role.Тест_ОсновнаяРоль + + + + Language.Русский + + + + + + TaxiEnableVersion8_2 + + + Русский + Тест_ОсновнаяРоль + Договоры + Терминалы + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Languages/Русский.xml b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Languages/Русский.xml new file mode 100644 index 000000000..c21624f52 --- /dev/null +++ b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Languages/Русский.xml @@ -0,0 +1,13 @@ + + + + + + Adopted + Русский + + UUID-002 + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Roles/Тест_ОсновнаяРоль.xml b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Roles/Тест_ОсновнаяРоль.xml new file mode 100644 index 000000000..ec9dfbaf6 --- /dev/null +++ b/tests/skills/cases/cfe-borrow/snapshots/newobjectposition-byname/cfe/Roles/Тест_ОсновнаяРоль.xml @@ -0,0 +1,10 @@ + + + + + Тест_ОсновнаяРоль + + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/fixtures/newobjectposition/Catalogs/Альфа.xml b/tests/skills/cases/meta-compile/fixtures/newobjectposition/Catalogs/Альфа.xml new file mode 100644 index 000000000..c7cfbc7f4 --- /dev/null +++ b/tests/skills/cases/meta-compile/fixtures/newobjectposition/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + 096cffa5-1d83-4271-bb88-72388cdaabac + f578ce80-4858-4f08-a106-a6e467925aa4 + + + 00fd8fe7-8624-4143-af6d-cd4c5fd29336 + f9499360-8730-46a0-91a2-dcbe3975f46f + + + 74df5c12-4b49-4291-82d9-49afddb102af + fcaa373f-c1ec-4977-b4e1-53b819935e1d + + + f05b7a5c-a97e-49b7-ae3a-b352beb8e0d2 + 30c0e517-711b-45a2-8669-522d6782b590 + + + 552ea59f-75a6-427a-945a-00498ea049b0 + d7bc94c0-45df-4bf0-9a32-a4a19393f625 + + + + Альфа + + + ru + Альфа + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/fixtures/newobjectposition/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/fixtures/newobjectposition/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/tests/skills/cases/meta-compile/fixtures/newobjectposition/Catalogs/Альфа/Ext/ObjectModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/fixtures/newobjectposition/Catalogs/Гамма.xml b/tests/skills/cases/meta-compile/fixtures/newobjectposition/Catalogs/Гамма.xml new file mode 100644 index 000000000..b9e2368af --- /dev/null +++ b/tests/skills/cases/meta-compile/fixtures/newobjectposition/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + 1c1644b5-518b-4209-baab-c065001ab1a6 + 752628e6-7115-4951-8f39-7e88a1da2cb0 + + + c3d1f2bf-c0de-4a2d-8de3-c08efe90f642 + 1166ce7b-9d1b-4c35-b6b4-cbf0eb6b11b1 + + + 08da6bbe-1466-4407-a3ee-9778016f8869 + bead518b-99e4-4499-96a1-1e6684c22ca4 + + + 56b7f3ba-eb07-43cf-8b43-a7476a4c1b26 + b9e5b816-d751-423f-98b7-83ff8188b132 + + + 692489cf-442c-49f4-ad16-a892d900e0d0 + aff54bea-5314-4a60-8dcc-bb14e7092989 + + + + Гамма + + + ru + Гамма + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/fixtures/newobjectposition/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/fixtures/newobjectposition/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/tests/skills/cases/meta-compile/fixtures/newobjectposition/Catalogs/Гамма/Ext/ObjectModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/fixtures/newobjectposition/Configuration.xml b/tests/skills/cases/meta-compile/fixtures/newobjectposition/Configuration.xml new file mode 100644 index 000000000..6302a86eb --- /dev/null +++ b/tests/skills/cases/meta-compile/fixtures/newobjectposition/Configuration.xml @@ -0,0 +1,253 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + 602ccdea-cd3f-4ffa-b167-d40577a532f0 + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + 99d58a05-b6c5-44b7-b0d1-ebfb9e2b4ed3 + + + e3687481-0a87-462c-a166-9f34594f9bba + a826bd37-12d4-42a0-9767-b3a251dcb29f + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + 4e24cc78-18ab-45f8-aae0-a1ef6518e650 + + + 51f2d5d8-ea4d-4064-8892-82951750031e + 26a88c96-2fc4-4b0d-ad53-65d39c0a2acf + + + e68182ea-4237-4383-967f-90c1e3370bc7 + 7f60fcac-8c3d-48dd-a78a-b32b62e3ddc5 + + + fb282519-d103-4dd3-bc12-cb271d631dfc + efeb0fd2-f17d-4d36-93b8-770e477d9b29 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Альфа + Гамма + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/fixtures/newobjectposition/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/fixtures/newobjectposition/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..8bc5bfbea --- /dev/null +++ b/tests/skills/cases/meta-compile/fixtures/newobjectposition/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + cbab57f2-a0f3-4f0a-89ea-4cb19570ab75 + + + + + b553047f-c9aa-4157-978d-448ecad24248 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/fixtures/newobjectposition/Languages/Русский.xml b/tests/skills/cases/meta-compile/fixtures/newobjectposition/Languages/Русский.xml new file mode 100644 index 000000000..793a508ac --- /dev/null +++ b/tests/skills/cases/meta-compile/fixtures/newobjectposition/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/newobjectposition-byname.json b/tests/skills/cases/meta-compile/newobjectposition-byname.json new file mode 100644 index 000000000..c47d69e78 --- /dev/null +++ b/tests/skills/cases/meta-compile/newobjectposition-byname.json @@ -0,0 +1,18 @@ +{ + "name": "newObjectPosition=byName: справочник встаёт между соседями по имени, а не в конец вида", + "setup": "fixture:newobjectposition", + "preRun": [ + { "writeFile": { "path": ".v8-project.json", "content": { "newObjectPosition": "byName", "databases": [] } } } + ], + "cwd": "workDir", + "input": { "type": "Catalog", "name": "Бета" }, + "validatePath": "Catalogs/Бета", + "expect": { + "files": ["Catalogs/Бета.xml"], + "fileContains": { + "file": "Configuration.xml", + "text": "Альфа\r\n\t\t\tБета\r\n\t\t\tГамма" + }, + "preserves": { "file": "Configuration.xml", "bom": true, "eol": "crlf", "encoding": "UTF-8", "finalNewline": false, "noCR13": true } + } +} diff --git a/tests/skills/cases/meta-compile/newobjectposition-default-end.json b/tests/skills/cases/meta-compile/newobjectposition-default-end.json new file mode 100644 index 000000000..2c28529e5 --- /dev/null +++ b/tests/skills/cases/meta-compile/newobjectposition-default-end.json @@ -0,0 +1,13 @@ +{ + "name": "newObjectPosition не задан: справочник дописывается в конец своего вида (поведение по умолчанию)", + "setup": "fixture:newobjectposition", + "cwd": "workDir", + "input": { "type": "Catalog", "name": "Бета" }, + "validatePath": "Catalogs/Бета", + "expect": { + "fileContains": { + "file": "Configuration.xml", + "text": "Альфа\r\n\t\t\tГамма\r\n\t\t\tБета" + } + } +} diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/.v8-project.json b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/.v8-project.json new file mode 100644 index 000000000..6f0c98b6e --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/.v8-project.json @@ -0,0 +1,4 @@ +{ + "newObjectPosition": "byName", + "databases": [] +} \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Альфа.xml b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Альфа.xml new file mode 100644 index 000000000..ba2d5fde3 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Альфа + + + ru + Альфа + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Бета.xml b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Бета.xml new file mode 100644 index 000000000..e1363c902 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Бета.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Бета + + + ru + Бета + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Бета/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Бета/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Гамма.xml b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Гамма.xml new file mode 100644 index 000000000..7279f86fd --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Гамма + + + ru + Гамма + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Configuration.xml new file mode 100644 index 000000000..d509c5de7 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Configuration.xml @@ -0,0 +1,254 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Альфа + Бета + Гамма + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/newobjectposition-byname/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Альфа.xml b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Альфа.xml new file mode 100644 index 000000000..ba2d5fde3 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Альфа.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Альфа + + + ru + Альфа + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Альфа/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Альфа/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Бета.xml b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Бета.xml new file mode 100644 index 000000000..e1363c902 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Бета.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Бета + + + ru + Бета + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Бета/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Бета/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Гамма.xml b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Гамма.xml new file mode 100644 index 000000000..7279f86fd --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Гамма.xml @@ -0,0 +1,91 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + + Гамма + + + ru + Гамма + + + + false + 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 + + + Managed + Use + + + + + + Use + Auto + DontUse + false + false + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Гамма/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Catalogs/Гамма/Ext/ObjectModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Configuration.xml new file mode 100644 index 000000000..655e0e4bc --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Configuration.xml @@ -0,0 +1,254 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Альфа + Гамма + Бета + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/meta-compile/snapshots/newobjectposition-default-end/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/fixtures/newobjectposition/Configuration.xml b/tests/skills/cases/role-compile/fixtures/newobjectposition/Configuration.xml new file mode 100644 index 000000000..62bc3d212 --- /dev/null +++ b/tests/skills/cases/role-compile/fixtures/newobjectposition/Configuration.xml @@ -0,0 +1,255 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + 40469b39-aafd-42e5-ae87-cba585b325ec + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + a1a99202-7609-4da6-a33a-902566bb1478 + + + e3687481-0a87-462c-a166-9f34594f9bba + 02111e6a-14a3-41af-ab63-12ee89b0cc47 + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + 3a9c72ac-ebe4-4058-8a39-4fde235ce840 + + + 51f2d5d8-ea4d-4064-8892-82951750031e + 89f4050d-5bc5-4224-804c-f4e22241c263 + + + e68182ea-4237-4383-967f-90c1e3370bc7 + 70eb51b2-4d20-49fd-9b5e-a227411d4451 + + + fb282519-d103-4dd3-bc12-cb271d631dfc + 51e5c9d0-8644-40a1-876a-e7152d8d9e28 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Тест_1 + Тест1 + ТестAlpha + ТестБета + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/fixtures/newobjectposition/Ext/ClientApplicationInterface.xml b/tests/skills/cases/role-compile/fixtures/newobjectposition/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..30c89e593 --- /dev/null +++ b/tests/skills/cases/role-compile/fixtures/newobjectposition/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + cbab57f2-a0f3-4f0a-89ea-4cb19570ab75 + + + + + b553047f-c9aa-4157-978d-448ecad24248 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/fixtures/newobjectposition/Languages/Русский.xml b/tests/skills/cases/role-compile/fixtures/newobjectposition/Languages/Русский.xml new file mode 100644 index 000000000..a6765e8cf --- /dev/null +++ b/tests/skills/cases/role-compile/fixtures/newobjectposition/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/Тест1.xml b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/Тест1.xml new file mode 100644 index 000000000..771667ee9 --- /dev/null +++ b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/Тест1.xml @@ -0,0 +1,15 @@ + + + + + Тест1 + + + ru + Тест1 + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/Тест1/Ext/Rights.xml b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/Тест1/Ext/Rights.xml new file mode 100644 index 000000000..57814e857 --- /dev/null +++ b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/Тест1/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/ТестAlpha.xml b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/ТестAlpha.xml new file mode 100644 index 000000000..a68b7fa2f --- /dev/null +++ b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/ТестAlpha.xml @@ -0,0 +1,15 @@ + + + + + ТестAlpha + + + ru + ТестAlpha + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/ТестAlpha/Ext/Rights.xml b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/ТестAlpha/Ext/Rights.xml new file mode 100644 index 000000000..57814e857 --- /dev/null +++ b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/ТестAlpha/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/Тест_1.xml b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/Тест_1.xml new file mode 100644 index 000000000..e4afa1b6d --- /dev/null +++ b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/Тест_1.xml @@ -0,0 +1,15 @@ + + + + + Тест_1 + + + ru + Тест_1 + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/Тест_1/Ext/Rights.xml b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/Тест_1/Ext/Rights.xml new file mode 100644 index 000000000..57814e857 --- /dev/null +++ b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/Тест_1/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/ТестБета.xml b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/ТестБета.xml new file mode 100644 index 000000000..f0222c54f --- /dev/null +++ b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/ТестБета.xml @@ -0,0 +1,15 @@ + + + + + ТестБета + + + ru + ТестБета + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/ТестБета/Ext/Rights.xml b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/ТестБета/Ext/Rights.xml new file mode 100644 index 000000000..57814e857 --- /dev/null +++ b/tests/skills/cases/role-compile/fixtures/newobjectposition/Roles/ТестБета/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/newobjectposition-key-case-script.json b/tests/skills/cases/role-compile/newobjectposition-key-case-script.json new file mode 100644 index 000000000..1c3dc20f3 --- /dev/null +++ b/tests/skills/cases/role-compile/newobjectposition-key-case-script.json @@ -0,0 +1,16 @@ +{ + "name": "newObjectPosition=byName: регистр не учитывается, латиница раньше кириллицы — тестBeta встаёт между ТестAlpha и ТестБета", + "setup": "fixture:newobjectposition", + "preRun": [ + { "writeFile": { "path": ".v8-project.json", "content": { "newObjectPosition": "byName", "databases": [] } } } + ], + "cwd": "workDir", + "input": { "name": "тестBeta" }, + "validatePath": "Roles/тестBeta", + "expect": { + "fileContains": { + "file": "Configuration.xml", + "text": "ТестAlpha\r\n\t\t\tтестBeta\r\n\t\t\tТестБета" + } + } +} diff --git a/tests/skills/cases/role-compile/newobjectposition-key-underscore.json b/tests/skills/cases/role-compile/newobjectposition-key-underscore.json new file mode 100644 index 000000000..a70c98c42 --- /dev/null +++ b/tests/skills/cases/role-compile/newobjectposition-key-underscore.json @@ -0,0 +1,17 @@ +{ + "name": "newObjectPosition=byName: подчёркивание раньше цифр — Тест_2 встаёт за Тест_1, а не после букв (ordinal дал бы иначе)", + "setup": "fixture:newobjectposition", + "preRun": [ + { "writeFile": { "path": ".v8-project.json", "content": { "newObjectPosition": "byName", "databases": [] } } } + ], + "cwd": "workDir", + "input": { "name": "Тест_2" }, + "validatePath": "Roles/Тест_2", + "expect": { + "fileContains": { + "file": "Configuration.xml", + "text": "Тест_1\r\n\t\t\tТест_2\r\n\t\t\tТест1" + }, + "preserves": { "file": "Configuration.xml", "bom": true, "eol": "crlf", "encoding": "UTF-8", "finalNewline": false, "noCR13": true } + } +} diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/.v8-project.json b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/.v8-project.json new file mode 100644 index 000000000..6f0c98b6e --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/.v8-project.json @@ -0,0 +1,4 @@ +{ + "newObjectPosition": "byName", + "databases": [] +} \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Configuration.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Configuration.xml new file mode 100644 index 000000000..42eb9d9fc --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Configuration.xml @@ -0,0 +1,256 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Тест_1 + Тест1 + ТестAlpha + тестBeta + ТестБета + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Ext/ClientApplicationInterface.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Languages/Русский.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/Тест1.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/Тест1.xml new file mode 100644 index 000000000..42ff2e56e --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/Тест1.xml @@ -0,0 +1,15 @@ + + + + + Тест1 + + + ru + Тест1 + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/Тест1/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/Тест1/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/Тест1/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/ТестAlpha.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/ТестAlpha.xml new file mode 100644 index 000000000..e82ecfbfb --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/ТестAlpha.xml @@ -0,0 +1,15 @@ + + + + + ТестAlpha + + + ru + ТестAlpha + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/ТестAlpha/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/ТестAlpha/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/ТестAlpha/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/Тест_1.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/Тест_1.xml new file mode 100644 index 000000000..476358736 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/Тест_1.xml @@ -0,0 +1,15 @@ + + + + + Тест_1 + + + ru + Тест_1 + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/Тест_1/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/Тест_1/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/Тест_1/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/ТестБета.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/ТестБета.xml new file mode 100644 index 000000000..98c990f10 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/ТестБета.xml @@ -0,0 +1,15 @@ + + + + + ТестБета + + + ru + ТестБета + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/ТестБета/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/ТестБета/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/ТестБета/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/тестBeta.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/тестBeta.xml new file mode 100644 index 000000000..9433ec8cf --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/тестBeta.xml @@ -0,0 +1,15 @@ + + + + + тестBeta + + + ru + тестBeta + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/тестBeta/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/тестBeta/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-case-script/Roles/тестBeta/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/.v8-project.json b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/.v8-project.json new file mode 100644 index 000000000..6f0c98b6e --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/.v8-project.json @@ -0,0 +1,4 @@ +{ + "newObjectPosition": "byName", + "databases": [] +} \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Configuration.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Configuration.xml new file mode 100644 index 000000000..c23451943 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Configuration.xml @@ -0,0 +1,256 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Тест_1 + Тест_2 + Тест1 + ТестAlpha + ТестБета + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Ext/ClientApplicationInterface.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Languages/Русский.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест1.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест1.xml new file mode 100644 index 000000000..42ff2e56e --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест1.xml @@ -0,0 +1,15 @@ + + + + + Тест1 + + + ru + Тест1 + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест1/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест1/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест1/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/ТестAlpha.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/ТестAlpha.xml new file mode 100644 index 000000000..e82ecfbfb --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/ТестAlpha.xml @@ -0,0 +1,15 @@ + + + + + ТестAlpha + + + ru + ТестAlpha + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/ТестAlpha/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/ТестAlpha/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/ТестAlpha/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест_1.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест_1.xml new file mode 100644 index 000000000..476358736 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест_1.xml @@ -0,0 +1,15 @@ + + + + + Тест_1 + + + ru + Тест_1 + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест_1/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест_1/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест_1/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест_2.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест_2.xml new file mode 100644 index 000000000..a5fe9ebd9 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест_2.xml @@ -0,0 +1,15 @@ + + + + + Тест_2 + + + ru + Тест_2 + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест_2/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест_2/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/Тест_2/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/ТестБета.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/ТестБета.xml new file mode 100644 index 000000000..98c990f10 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/ТестБета.xml @@ -0,0 +1,15 @@ + + + + + ТестБета + + + ru + ТестБета + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/ТестБета/Ext/Rights.xml b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/ТестБета/Ext/Rights.xml new file mode 100644 index 000000000..9a1537d28 --- /dev/null +++ b/tests/skills/cases/role-compile/snapshots/newobjectposition-key-underscore/Roles/ТестБета/Ext/Rights.xml @@ -0,0 +1,6 @@ + + + false + true + false + \ No newline at end of file diff --git a/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Configuration.xml b/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Configuration.xml new file mode 100644 index 000000000..3247664ca --- /dev/null +++ b/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Configuration.xml @@ -0,0 +1,253 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + 2d333cd4-c61d-40c4-a240-c7508c0b7b3f + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + cff57153-82ec-46c8-b877-6d7e54fd7ff3 + + + e3687481-0a87-462c-a166-9f34594f9bba + fb1623c7-207a-49fa-beab-f58a335fd7a6 + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + 9a29f265-5f56-497e-90eb-46f5eb075ede + + + 51f2d5d8-ea4d-4064-8892-82951750031e + 7c0a4cbc-253c-4165-ae99-a2b8298a16a8 + + + e68182ea-4237-4383-967f-90c1e3370bc7 + f1b97fed-65d4-48a5-96b1-731b48cfff6e + + + fb282519-d103-4dd3-bc12-cb271d631dfc + 786ac54d-e9d3-4215-8c02-da2bcbba77e8 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Альфа + Гамма + + + \ No newline at end of file diff --git a/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Ext/ClientApplicationInterface.xml b/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..4bc8065b3 --- /dev/null +++ b/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + cbab57f2-a0f3-4f0a-89ea-4cb19570ab75 + + + + + b553047f-c9aa-4157-978d-448ecad24248 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Languages/Русский.xml b/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Languages/Русский.xml new file mode 100644 index 000000000..d4c3b2e85 --- /dev/null +++ b/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Subsystems/Альфа.xml b/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Subsystems/Альфа.xml new file mode 100644 index 000000000..959820985 --- /dev/null +++ b/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Subsystems/Альфа.xml @@ -0,0 +1,22 @@ + + + + + Альфа + + + ru + Альфа + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Subsystems/Гамма.xml b/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Subsystems/Гамма.xml new file mode 100644 index 000000000..d5d7dd429 --- /dev/null +++ b/tests/skills/cases/subsystem-compile/fixtures/newobjectposition/Subsystems/Гамма.xml @@ -0,0 +1,22 @@ + + + + + Гамма + + + ru + Гамма + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/subsystem-compile/newobjectposition-subsystem-always-end.json b/tests/skills/cases/subsystem-compile/newobjectposition-subsystem-always-end.json new file mode 100644 index 000000000..72f62c6d3 --- /dev/null +++ b/tests/skills/cases/subsystem-compile/newobjectposition-subsystem-always-end.json @@ -0,0 +1,17 @@ +{ + "name": "newObjectPosition=byName подсистем не касается: Бета дописывается в конец, потому что порядок подсистем виден в панели разделов", + "setup": "fixture:newobjectposition", + "preRun": [ + { "writeFile": { "path": ".v8-project.json", "content": { "newObjectPosition": "byName", "databases": [] } } } + ], + "cwd": "workDir", + "input": { "name": "Бета" }, + "validatePath": "Subsystems/Бета", + "expect": { + "fileContains": { + "file": "Configuration.xml", + "text": "Альфа\r\n\t\t\tГамма\r\n\t\t\tБета" + }, + "preserves": { "file": "Configuration.xml", "bom": true, "eol": "crlf", "encoding": "UTF-8", "finalNewline": false, "noCR13": true } + } +} diff --git a/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/.v8-project.json b/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/.v8-project.json new file mode 100644 index 000000000..6f0c98b6e --- /dev/null +++ b/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/.v8-project.json @@ -0,0 +1,4 @@ +{ + "newObjectPosition": "byName", + "databases": [] +} \ No newline at end of file diff --git a/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Configuration.xml b/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Configuration.xml new file mode 100644 index 000000000..1111f617b --- /dev/null +++ b/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Configuration.xml @@ -0,0 +1,254 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + Альфа + Гамма + Бета + + + \ No newline at end of file diff --git a/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Ext/ClientApplicationInterface.xml b/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Languages/Русский.xml b/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Subsystems/Альфа.xml b/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Subsystems/Альфа.xml new file mode 100644 index 000000000..eceee64ef --- /dev/null +++ b/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Subsystems/Альфа.xml @@ -0,0 +1,22 @@ + + + + + Альфа + + + ru + Альфа + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Subsystems/Бета.xml b/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Subsystems/Бета.xml new file mode 100644 index 000000000..2e769abcd --- /dev/null +++ b/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Subsystems/Бета.xml @@ -0,0 +1,22 @@ + + + + + Бета + + + ru + Бета + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Subsystems/Гамма.xml b/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Subsystems/Гамма.xml new file mode 100644 index 000000000..e2c985fdc --- /dev/null +++ b/tests/skills/cases/subsystem-compile/snapshots/newobjectposition-subsystem-always-end/Subsystems/Гамма.xml @@ -0,0 +1,22 @@ + + + + + Гамма + + + ru + Гамма + + + + true + true + false + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/xdto-compile/fixtures/newobjectposition/Configuration.xml b/tests/skills/cases/xdto-compile/fixtures/newobjectposition/Configuration.xml new file mode 100644 index 000000000..cbe0482c5 --- /dev/null +++ b/tests/skills/cases/xdto-compile/fixtures/newobjectposition/Configuration.xml @@ -0,0 +1,253 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + b106f45f-600f-4f38-9161-9c47700a5046 + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + 075510c9-7b9b-45ca-8f51-1ddf429a6810 + + + e3687481-0a87-462c-a166-9f34594f9bba + ad188e60-19d5-4115-8ab5-28baf8fb8aed + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + c2b8a80d-e43c-42af-ba60-752754eeb32e + + + 51f2d5d8-ea4d-4064-8892-82951750031e + f3b8f5d6-81db-427a-971e-73e2b122dc57 + + + e68182ea-4237-4383-967f-90c1e3370bc7 + 72f44335-fd87-4c4e-8843-089458df5aa3 + + + fb282519-d103-4dd3-bc12-cb271d631dfc + 38823070-1762-422e-8584-17912ce75394 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + aaa + zzz + + + \ No newline at end of file diff --git a/tests/skills/cases/xdto-compile/fixtures/newobjectposition/Ext/ClientApplicationInterface.xml b/tests/skills/cases/xdto-compile/fixtures/newobjectposition/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..74eaa33ec --- /dev/null +++ b/tests/skills/cases/xdto-compile/fixtures/newobjectposition/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + cbab57f2-a0f3-4f0a-89ea-4cb19570ab75 + + + + + b553047f-c9aa-4157-978d-448ecad24248 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/xdto-compile/fixtures/newobjectposition/Languages/Русский.xml b/tests/skills/cases/xdto-compile/fixtures/newobjectposition/Languages/Русский.xml new file mode 100644 index 000000000..375750fa1 --- /dev/null +++ b/tests/skills/cases/xdto-compile/fixtures/newobjectposition/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/xdto-compile/newobjectposition-byname.json b/tests/skills/cases/xdto-compile/newobjectposition-byname.json new file mode 100644 index 000000000..153310c7d --- /dev/null +++ b/tests/skills/cases/xdto-compile/newobjectposition-byname.json @@ -0,0 +1,19 @@ +{ + "name": "newObjectPosition=byName: пакет XDTO встаёт между соседями по имени", + "setup": "fixture:newobjectposition", + "caseFiles": ["minimal.xsd"], + "preRun": [ + { "writeFile": { "path": ".v8-project.json", "content": { "newObjectPosition": "byName", "databases": [] } } } + ], + "cwd": "workDir", + "params": { "xsdFile": "minimal.xsd" }, + "validatePath": "XDTOPackages/minimal", + "expect": { + "fileContains": { + "file": "Configuration.xml", + "text": "aaa\r\n\t\t\tminimal\r\n\t\t\tzzz" + }, + "preserves": { "file": "Configuration.xml", "bom": true, "eol": "crlf", "encoding": "UTF-8", "finalNewline": false, "noCR13": true } + }, + "skipPlatformVerify": "фикстура объявляет пакеты aaa/zzz без файлов: кейс проверяет место вставки в ChildObjects, а не загружаемость конфигурации" +} diff --git a/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/.v8-project.json b/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/.v8-project.json new file mode 100644 index 000000000..6f0c98b6e --- /dev/null +++ b/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/.v8-project.json @@ -0,0 +1,4 @@ +{ + "newObjectPosition": "byName", + "databases": [] +} \ No newline at end of file diff --git a/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/Configuration.xml b/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/Configuration.xml new file mode 100644 index 000000000..07f2f7a97 --- /dev/null +++ b/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/Configuration.xml @@ -0,0 +1,254 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + aaa + minimal + zzz + + + \ No newline at end of file diff --git a/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/Ext/ClientApplicationInterface.xml b/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/Languages/Русский.xml b/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/XDTOPackages/minimal.xml b/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/XDTOPackages/minimal.xml new file mode 100644 index 000000000..c603340a3 --- /dev/null +++ b/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/XDTOPackages/minimal.xml @@ -0,0 +1,16 @@ + + + + + minimal + + + ru + minimal + + + + urn:test:minimal + + + \ No newline at end of file diff --git a/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/XDTOPackages/minimal/Ext/Package.bin b/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/XDTOPackages/minimal/Ext/Package.bin new file mode 100644 index 000000000..54b87db8a --- /dev/null +++ b/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/XDTOPackages/minimal/Ext/Package.bin @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/minimal.xsd b/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/minimal.xsd new file mode 100644 index 000000000..fe77cf124 --- /dev/null +++ b/tests/skills/cases/xdto-compile/snapshots/newobjectposition-byname/minimal.xsd @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/tests/skills/check-inline-drift.mjs b/tests/skills/check-inline-drift.mjs index b62094512..bfa8883c3 100644 --- a/tests/skills/check-inline-drift.mjs +++ b/tests/skills/check-inline-drift.mjs @@ -71,7 +71,7 @@ const FAMILIES = [ // вверх. Группа db-* использует её же, чтобы найти запись базы и взять реквизиты // хранилища — задача одна, поэтому семья общая, а не вторая с тем же телом. { id: 'full', authority: 'cf-edit', - consumers: ['db-dump-xml', 'db-load-git', 'db-load-xml', 'db-repo', 'db-update', + consumers: ['cfe-borrow', 'db-dump-xml', 'db-load-git', 'db-load-xml', 'db-repo', 'db-update', 'form-add', 'form-compile', 'form-edit', 'help-add', 'interface-edit', 'meta-compile', 'meta-edit', 'meta-remove', 'mxl-compile', 'role-compile', 'skd-compile', 'skd-edit', 'subsystem-compile', 'subsystem-edit', 'template-add', 'xdto-compile', 'xdto-edit'] }, @@ -145,7 +145,7 @@ const FAMILIES = [ { id: 'base', authority: 'cf-init', consumers: ['cfe-borrow', 'cfe-init', 'epf-init', 'erf-init', 'form-add', 'form-compile', 'help-add', 'meta-compile', 'mxl-compile', 'role-compile', 'skd-compile', - 'subsystem-compile', 'subsystem-edit', 'template-add'] }, + 'subsystem-compile', 'subsystem-edit', 'template-add', 'xdto-compile'] }, ], }, @@ -213,24 +213,30 @@ const FAMILIES = [ { id: 'text-no-quot', authority: 'meta-compile', consumers: ['cf-init', 'cfe-init', 'epf-init', 'erf-init', 'form-compile', 'form-edit', 'meta-edit', 'mxl-compile', 'role-compile', 'skd-compile', 'skd-edit', - 'subsystem-compile', 'subsystem-edit'] }, + 'subsystem-compile', 'subsystem-edit', 'xdto-compile'] }, ], }, // ─── Сохранение стиля XML при round-trip (#44/#46/#47) ─────────────────── { - name: 'detect_xml_style', py: '_detect_xml_style', ps1: null, + name: 'detect_xml_style', py: '_detect_xml_style', ps1: 'Detect-XmlStyle', variants: [ - { id: 'base', authority: 'cf-edit', - consumers: ['cfe-borrow', 'form-add', 'form-remove', 'help-add', 'interface-edit', 'meta-edit', - 'meta-remove', 'subsystem-edit', 'template-add', 'template-remove'] }, + { id: 'base', authority: 'cf-edit', consumers: [], + // PS-сторона семьи пока закрыта только в радиусе задачи про порядок объектов; + // в остальных навыках та же канонизация лежит инлайном — отдельная волна. + consumersPy: ['cfe-borrow', 'form-add', 'form-remove', 'help-add', 'interface-edit', 'meta-edit', + 'meta-remove', 'subsystem-edit', 'template-add', 'template-remove'], + consumersPs1: ['cfe-borrow'] }, ], }, { - name: 'finalize_xml_bytes', py: '_finalize_xml_bytes', ps1: null, + name: 'finalize_xml_bytes', py: '_finalize_xml_bytes', ps1: 'Finalize-XmlText', variants: [ - { id: 'base', authority: 'cf-edit', - consumers: ['cfe-borrow', 'form-add', 'form-remove', 'help-add', 'interface-edit', 'meta-edit', - 'meta-remove', 'subsystem-edit', 'template-add', 'template-remove'] }, + { id: 'base', authority: 'cf-edit', consumers: [], + // PS-сторона семьи пока закрыта только в радиусе задачи про порядок объектов; + // в остальных навыках та же канонизация лежит инлайном — отдельная волна. + consumersPy: ['cfe-borrow', 'form-add', 'form-remove', 'help-add', 'interface-edit', 'meta-edit', + 'meta-remove', 'subsystem-edit', 'template-add', 'template-remove'], + consumersPs1: ['cfe-borrow'] }, ], }, @@ -420,7 +426,7 @@ const FAMILIES = [ name: 'ChildObjects: регистрация объекта в составе', py: 'register_in_childobjects', ps1: 'Register-InChildObjects', variants: [ - { id: 'grouped', authority: 'meta-compile', consumers: ['role-compile'] }, + { id: 'grouped', authority: 'meta-compile', consumers: ['role-compile', 'xdto-compile'] }, { id: 'nested-parent', authority: 'subsystem-compile', consumers: [], why: 'родителем бывает вложенный Subsystem.xml произвольной глубины: отступ берётся из документа, а запись дописывается в конец блока — фиксированные три табуляции там неверны, и группировать по типу нечего' }, ], @@ -447,6 +453,26 @@ const FAMILIES = [ ], }, + // ─── Порядок объектов метаданных в ──────────────────────── + // Куда встаёт новая запись — решение проекта (newObjectPosition в .v8-project.json), + // а не навыка. Компаратор при этом константа: он моделирует дерево Конфигуратора и + // одинаков для всех проектов, поэтому команда сортировки cf-edit настройку не читает. + { + name: 'ChildObjects: настройка newObjectPosition', + py: 'get_new_object_position', ps1: 'Get-NewObjectPosition', + variants: [ + { id: 'base', authority: 'meta-compile', + consumers: ['cf-edit', 'cfe-borrow', 'role-compile', 'xdto-compile'] }, + ], + }, + { + name: 'ChildObjects: порядок имён объектов', + py: 'compare_metadata_names', ps1: 'Compare-MetadataNames', + variants: [ + { id: 'base', authority: 'meta-compile', + consumers: ['cf-edit', 'cfe-borrow', 'role-compile', 'xdto-compile'] }, + ], + }, ]; // ─── Семьи, разъехавшиеся целиком ───────────────────────────────────────────