#!/bin/bash # Smoke-тесты логики без запуска GUI set -euo pipefail ROOT="$(cd "$(dirname "$0")" && pwd)" cd "$ROOT" # SDK из CommandLineTools может не совпадать с тулчейном — берём SDK из Xcode. export SDKROOT="$(xcrun --sdk macosx --show-sdk-path 2>/dev/null || echo "${SDKROOT:-}")" echo "1) build" swift build -c release >/dev/null echo "2) OAuth parse" swift -e ' import Foundation func parse(_ input: String) -> String? { let trimmed = input.trimmingCharacters(in: .whitespacesAndNewlines) if trimmed.isEmpty { return nil } if trimmed.contains("access_token=") { let parts = trimmed.replacingOccurrences(of: "#", with: "&").replacingOccurrences(of: "?", with: "&").split(separator: "&") for part in parts { let kv = part.split(separator: "=", maxSplits: 1) if kv.count == 2, kv[0] == "access_token" { return String(kv[1]) } } } if trimmed.range(of: "^[A-Za-z0-9_\\-]{16,}$", options: .regularExpression) != nil { return trimmed } return nil } assert(parse("0c4181a7c2cf4521964a72ff57a34a07") == "0c4181a7c2cf4521964a72ff57a34a07") assert(parse("https://oauth.yandex.ru/verification_code#access_token=abc123&token_type=bearer") == "abc123") print("ok") ' echo "3) API path encoding" swift -e ' import Foundation func diskPath(_ path: String) -> String { if path.hasPrefix("disk:") || path.hasPrefix("trash:") { return path } let normalized = path.hasPrefix("/") ? path : "/" + path return "disk:\(normalized)" } assert(diskPath("/Фото") == "disk:/Фото") assert(diskPath("Фото") == "disk:/Фото") assert(diskPath("trash:/x") == "trash:/x") print("ok") ' echo "4) app bundle" APP="$ROOT/.build/YandexDisk.app" test -x "$APP/Contents/MacOS/YandexDiskClient" plutil -lint "$APP/Contents/Info.plist" codesign -dv "$APP" 2>&1 | head -5 echo "ALL SMOKE TESTS PASSED"