passforios/passKitTests/Passwords/PasswordGeneratorTest.swift

99 lines
3.1 KiB
Swift
Raw Normal View History

//
// PasswordGeneratorTest.swift
// passKitTests
//
// Created by Danny Moesch on 26.02.20.
// Copyright © 2020 Bob Sun. All rights reserved.
//
import XCTest
@testable import passKit
class PasswordGeneratorTest: XCTestCase {
func testLimitedLength() {
[
PasswordGenerator(length: 15),
PasswordGenerator(length: -3),
PasswordGenerator(length: 128),
].forEach { generator in
XCTAssertLessThanOrEqual(generator.limitedLength, generator.flavor.lengthLimits.max)
XCTAssertGreaterThanOrEqual(generator.limitedLength, generator.flavor.lengthLimits.min)
}
}
func testAcceptableGroups() {
[
(15, 4),
(19, 4),
(9, 5),
(11, 6),
(259, 13),
].forEach { length, groups in
XCTAssertTrue(PasswordGenerator(length: length).isAcceptable(groups: groups))
}
}
func testNotAcceptableGroups() {
[
(15, 0),
(19, 20),
(9, 9),
(11, -1),
].forEach { length, groups in
XCTAssertFalse(PasswordGenerator(length: length).isAcceptable(groups: groups))
}
}
2020-04-19 15:42:00 +02:00
func testGroupsAreNotAcceptableForXKCDStyle() {
var generator = PasswordGenerator(length: 15)
XCTAssertTrue(generator.isAcceptable(groups: 4))
generator.flavor = .xkcd
XCTAssertFalse(generator.isAcceptable(groups: 4))
}
func testRandomGroupsCount() {
[
PasswordGenerator(length: 15, groups: 4),
PasswordGenerator(length: 24, groups: 5),
PasswordGenerator(length: 63, groups: 8),
].forEach { generator in
XCTAssertEqual(generator.generate().split(separator: "-").count, generator.groups)
}
}
func testXKCDWordsCount() {
[
PasswordGenerator(flavor: .xkcd, length: 4, useSpecialSymbols: false),
PasswordGenerator(flavor: .xkcd, length: 8, useSpecialSymbols: false),
PasswordGenerator(flavor: .xkcd, length: 1, useSpecialSymbols: false),
].forEach { generator in
XCTAssertEqual(generator.generate().split { "0123456789".contains($0) }.count, generator.limitedLength)
}
}
func testRandomPasswordLength() {
[
PasswordGenerator(),
PasswordGenerator(groups: 1),
PasswordGenerator(length: 25),
PasswordGenerator(length: 47, groups: 12),
PasswordGenerator(useDigits: true),
].forEach { generator in
XCTAssertEqual(generator.generate().count, generator.length)
}
}
func testXKCDPasswordGeneration() {
let typicalPassword = PasswordGenerator(flavor: .xkcd).generate()
XCTAssertFalse(typicalPassword.isEmpty)
XCTAssertFalse(typicalPassword.trimmingCharacters(in: .letters).isEmpty)
let passwordWithoutSeparators = PasswordGenerator(flavor: .xkcd, useDigits: false, useSpecialSymbols: false).generate()
XCTAssertFalse(passwordWithoutSeparators.isEmpty)
XCTAssertTrue(passwordWithoutSeparators.trimmingCharacters(in: .letters).isEmpty)
}
}