Отдельная issue из #56, как договаривались.
Тестов нет, и в CONTRIBUTING.md это названо осознанным решением: «панель полноценно тестировать смысла мало». С панелью согласен целиком — вырез, наведение, анимации и раскладка рельса проверяются глазами и никак иначе.
Но сторы — не панель. Это разбор файла, дедупликация и порядок элементов, и они уже трижды ломались ровно в этом месте:
Три поломки, ноль вью, один и тот же файл. Это не «полноценно тестировать панель», это проверить разбор и запись snippets.json.
Что предлагаю. Один тестовый таргет, только на чистые сторы. Начать с SnippetStore: Snippet.id (две заготовки с одним именем живут отдельно, полный дубликат схлопывается), update (правка попадает в свой ряд и не двигает его), add, move, и разбор битого файла — что fileBroken действительно не даёт перезаписать snippets.json. Дальше по вкусу — ShelfStore и ClipboardStore из той же породы.
Зависимостей не нужно: swift-testing и XCTest приходят с тулчейном, Package.swift растёт на один .testTarget, в build.yml добавляется одна строка swift test.
Что проверил. Собрал экспериментальный .testTarget поверх текущего main — @testable import Cyclop к executableTarget резолвится, таргет линкуется. Запустить у себя не смог: на машине стоят только Command Line Tools, без Xcode, а значит нет ни XCTest, ни Testing. На раннере macos-15 с полным Xcode оба на месте, так что в CI это поедет — но честно говорю, что зелёный прогон я своими глазами не видел.
Что предлагаю не делать. Не трогать NotchGeometry, NotchScreenPanel и вью — там всё завязано на живые NSScreen и курсор, и тест на это будет дороже и врать чаще, чем ловить.
Если идея нравится — сделаю PR с таргетом и первой пачкой на SnippetStore. Если считаешь, что и это лишнее — issue можно закрыть, спорить не буду.
Отдельная issue из #56, как договаривались.
Тестов нет, и в CONTRIBUTING.md это названо осознанным решением: «панель полноценно тестировать смысла мало». С панелью согласен целиком — вырез, наведение, анимации и раскладка рельса проверяются глазами и никак иначе.
Но сторы — не панель. Это разбор файла, дедупликация и порядок элементов, и они уже трижды ломались ровно в этом месте:
snippets.jsonсъедала правку руками;Три поломки, ноль вью, один и тот же файл. Это не «полноценно тестировать панель», это проверить разбор и запись
snippets.json.Что предлагаю. Один тестовый таргет, только на чистые сторы. Начать с
SnippetStore:Snippet.id(две заготовки с одним именем живут отдельно, полный дубликат схлопывается),update(правка попадает в свой ряд и не двигает его),add,move, и разбор битого файла — чтоfileBrokenдействительно не даёт перезаписатьsnippets.json. Дальше по вкусу —ShelfStoreиClipboardStoreиз той же породы.Зависимостей не нужно:
swift-testingиXCTestприходят с тулчейном,Package.swiftрастёт на один.testTarget, вbuild.ymlдобавляется одна строкаswift test.Что проверил. Собрал экспериментальный
.testTargetповерх текущегоmain—@testable import CyclopкexecutableTargetрезолвится, таргет линкуется. Запустить у себя не смог: на машине стоят только Command Line Tools, без Xcode, а значит нет ниXCTest, ниTesting. На раннереmacos-15с полным Xcode оба на месте, так что в CI это поедет — но честно говорю, что зелёный прогон я своими глазами не видел.Что предлагаю не делать. Не трогать
NotchGeometry,NotchScreenPanelи вью — там всё завязано на живыеNSScreenи курсор, и тест на это будет дороже и врать чаще, чем ловить.Если идея нравится — сделаю PR с таргетом и первой пачкой на
SnippetStore. Если считаешь, что и это лишнее — issue можно закрыть, спорить не буду.