Skip to content

Тесты на сторы: три поломки подряд в разборе snippets.json, и ни одного вью в них #65

Description

@ispy4you

Отдельная 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 можно закрыть, спорить не буду.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions