- Избранное: правый клик → «В избранное», звезда в строке, метки в UserDefaults, вкладка подгружает ресурсы по путям - Доступные мне: кнопка «+» добавляет публичную ссылку; метаданные через официальный GET /v1/disk/public/resources; открытие/копирование/удаление - Ограничение платформы задокументировано (ПРАВКИ.md): REST API не отдаёт список shared-with-me - smoke_test: фикс пути бандла
54 lines
1.9 KiB
Bash
Executable File
54 lines
1.9 KiB
Bash
Executable File
#!/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/YanDisk.app"
|
|
test -x "$APP/Contents/MacOS/YanDisk"
|
|
plutil -lint "$APP/Contents/Info.plist"
|
|
codesign -dv "$APP" 2>&1 | head -5
|
|
echo "ALL SMOKE TESTS PASSED"
|