Files
Leeksov 4647310322 GLEGram 12.5 — Initial public release
Based on Swiftgram 12.5 (Telegram iOS 12.5).
All GLEGram features ported and organized in GLEGram/ folder.

Features: Ghost Mode, Saved Deleted Messages, Content Protection Bypass,
Font Replacement, Fake Profile, Chat Export, Plugin System, and more.

See CHANGELOG_12.5.md for full details.
2026-04-06 09:48:12 +03:00

131 lines
3.9 KiB
Swift

@testable import ProjectSpec
import XCTest
final class DictionaryExtensionTests: XCTestCase {
func testRemovingNil_ShouldReturnNewDictionaryWithoutOptionalValues() {
// Arrange
let input: [String: Any?] = inputDictionary
let expected: [String: Any] = outputDictionary
XCTAssertNotEqual(input as NSDictionary, expected as NSDictionary)
// Act
let sut: [String: Any] = input.removingEmptyArraysDictionariesAndNils()
// Assert
XCTAssertEqual(sut as NSDictionary, expected as NSDictionary)
}
}
extension DictionaryExtensionTests {
var inputDictionary: [String: Any?] {
let inner1: [String: Any?] = [
"inner1": "value1",
"inner2": Optional("value2"),
"inner3": nil,
"inner4": Optional([1, 2, 3]),
]
let inner2: [String: Any?] = [
"inner1": "value1",
"inner2": Optional("value2"),
"inner3": inner1,
"inner4": [1, 2, 3],
]
let inner3: [String: Any?] = [
"inner1": "value1",
"inner2": Optional("value2"),
"inner3": Optional(inner1),
"inner4": [1, 2, 3],
"inner5": inner2,
]
let inner4: [String: Any?] = [
"inner1": inner1,
"inner2": inner2,
"inner3": inner3,
"inner4": Optional("value4"),
"inner5": nil,
]
let inner6: [String: Any?] = [
"inner1": "value1",
"inner2": "value2",
"inner3": [inner1, inner1, inner1],
]
let input: [String: Any?] = [
"inner1": "value1",
"inner2": Optional("value2"),
"inner3": nil,
"inner4": inner4,
"inner5": [],
"inner6": inner6,
"inner7": [:],
]
return input
}
var outputDictionary: [String: Any] {
let expected: [String: Any] = [
"inner1": "value1",
"inner2": "value2",
"inner4": [
"inner1": [
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3],
],
"inner2": [
"inner1": "value1",
"inner2": "value2",
"inner3": [
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3],
],
"inner4": [1, 2, 3],
],
"inner3": [
"inner1": "value1",
"inner2": "value2",
"inner3": [
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3],
],
"inner4": [1, 2, 3],
"inner5": [
"inner1": "value1",
"inner2": "value2",
"inner3": [
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3],
],
"inner4": [1, 2, 3],
],
],
"inner4": "value4",
],
"inner6": [
"inner1": "value1",
"inner2": "value2",
"inner3": [[
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3],
], [
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3],
], [
"inner1": "value1",
"inner2": "value2",
"inner4": [1, 2, 3],
]],
],
]
return expected
}
}