Base32Tests.swift 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. //
  2. // Base32Tests.swift
  3. // TOTP
  4. //
  5. // Created by 野村 憲男 on 1/24/15.
  6. // Copyright (c) 2015 Norio Nomura. All rights reserved.
  7. //
  8. import Foundation
  9. import XCTest
  10. import Base32
  11. class Base32Tests: XCTestCase {
  12. let vectors: [(String,String,String)] = [
  13. ("", "", ""),
  14. ("f", "MY======", "CO======"),
  15. ("fo", "MZXQ====", "CPNG===="),
  16. ("foo", "MZXW6===", "CPNMU==="),
  17. ("foob", "MZXW6YQ=", "CPNMUOG="),
  18. ("fooba", "MZXW6YTB", "CPNMUOJ1"),
  19. ("foobar", "MZXW6YTBOI======", "CPNMUOJ1E8======"),
  20. ]
  21. override func setUp() {
  22. super.setUp()
  23. // Put setup code here. This method is called before the invocation of each test method in the class.
  24. }
  25. override func tearDown() {
  26. // Put teardown code here. This method is called after the invocation of each test method in the class.
  27. super.tearDown()
  28. }
  29. // MARK: https://tools.ietf.org/html/rfc4648
  30. func test_RFC4648_Encode() {
  31. self.measureBlock{
  32. for _ in 0...100 {
  33. for (test, expect, expectHex) in self.vectors {
  34. let data = test.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
  35. let result = base32Encode(data)
  36. XCTAssertEqual(result, expect, "base32Encode for \(test)")
  37. }
  38. }
  39. }
  40. }
  41. func test_RFC4648_Decode() {
  42. self.measureBlock{
  43. for _ in 0...100 {
  44. for (expect, test, testHex) in self.vectors {
  45. let data = expect.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
  46. let result = base32DecodeToData(test)
  47. XCTAssertEqual(result!, data!, "base32Decode for \(test)")
  48. }
  49. }
  50. }
  51. }
  52. func test_RFC4648_HexEncode() {
  53. self.measureBlock{
  54. for _ in 0...100 {
  55. for (test, expect, expectHex) in self.vectors {
  56. let data = test.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
  57. let resultHex = base32HexEncode(data)
  58. XCTAssertEqual(resultHex, expectHex, "base32HexEncode for \(test)")
  59. }
  60. }
  61. }
  62. }
  63. func test_RFC4648_HexDecode() {
  64. self.measureBlock{
  65. for _ in 0...100 {
  66. for (expect, test, testHex) in self.vectors {
  67. let data = expect.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
  68. let resultHex = base32HexDecodeToData(testHex)
  69. XCTAssertEqual(resultHex!, data!, "base32HexDecode for \(testHex)")
  70. }
  71. }
  72. }
  73. }
  74. // MARK: -
  75. func test_ExtensionString() {
  76. self.measureBlock{
  77. for _ in 0...100 {
  78. for (test, expect, expectHex) in self.vectors {
  79. let result = test.base32EncodedString
  80. let resultHex = test.base32HexEncodedString
  81. XCTAssertEqual(result, expect, "\(test).base32EncodedString")
  82. XCTAssertEqual(resultHex, expectHex, "\(test).base32HexEncodedString")
  83. let decoded = result.base32DecodedString()
  84. let decodedHex = resultHex.base32HexDecodedString()
  85. XCTAssertEqual(decoded!, test, "\(result).base32DecodedString()")
  86. XCTAssertEqual(decodedHex!, test, "\(resultHex).base32HexDecodedString()")
  87. }
  88. }
  89. }
  90. }
  91. func test_ExtensionData() {
  92. let dataVectors = vectors.map {
  93. (
  94. $0.dataUsingEncoding(NSUTF8StringEncoding)!,
  95. $1.dataUsingEncoding(NSUTF8StringEncoding)!,
  96. $2.dataUsingEncoding(NSUTF8StringEncoding)!
  97. )
  98. }
  99. self.measureBlock{
  100. for _ in 0...100 {
  101. for (test, expect, expectHex) in dataVectors {
  102. let result = test.base32EncodedData
  103. let resultHex = test.base32HexEncodedData
  104. XCTAssertEqual(result!, expect, "\(test).base32EncodedData")
  105. XCTAssertEqual(resultHex!, expectHex, "\(test).base32HexEncodedData")
  106. let decoded = result!.base32DecodedData
  107. let decodedHex = resultHex!.base32HexDecodedData
  108. XCTAssertEqual(decoded!, test, "\(result).base32DecodedData")
  109. XCTAssertEqual(decodedHex!, test, "\(resultHex).base32HexDecodedData")
  110. }
  111. }
  112. }
  113. }
  114. func test_ExtensionDataAndString() {
  115. let dataAndStringVectors = vectors.map {($0.dataUsingEncoding(NSUTF8StringEncoding)!, $1, $2)}
  116. self.measureBlock{
  117. for _ in 0...100 {
  118. for (test, expect, expectHex) in dataAndStringVectors {
  119. let result = test.base32EncodedString
  120. let resultHex = test.base32HexEncodedString
  121. XCTAssertEqual(result, expect, "\(test).base32EncodedString")
  122. XCTAssertEqual(resultHex, expectHex, "\(test).base32HexEncodedString")
  123. let decoded = result.base32DecodedData
  124. let decodedHex = resultHex.base32HexDecodedData
  125. XCTAssertEqual(decoded!, test, "\(result).base32DecodedData")
  126. XCTAssertEqual(decodedHex!, test, "\(resultHex).base32HexDecodedData")
  127. }
  128. }
  129. }
  130. }
  131. }