Skip to content

Commit 18c059b

Browse files
committed
Add tests for base58 encode and decode
1 parent c2f3334 commit 18c059b

File tree

3 files changed

+107
-0
lines changed

3 files changed

+107
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
// Package: web3swift
2+
// Created by Alex Vlasov.
3+
// Copyright © 2018 Alex Vlasov. All rights reserved.
4+
//
5+
// Base58 tests by Mark Loit 2022
6+
//
7+
8+
import XCTest
9+
10+
@testable import web3swift
11+
12+
//
13+
// This Test suite is intended to hold various tests for our data conversion code
14+
// that don't seem to fit elsewhere
15+
//
16+
17+
// Some base58 test vectors pulled from: https://tools.ietf.org/id/draft-msporny-base58-01.html
18+
// note that one of the return values is incorrect in the reference above, it is corrected here
19+
class DataConversionTests: XCTestCase {
20+
// test an empty input for the base58 decoder & decoder
21+
func testBase58() throws {
22+
let vector = ""
23+
24+
print("Testing Base58 Decode \"\(vector)\"")
25+
guard let resultDecoded = vector.base58DecodedData else { return XCTFail("base58 decode unexpectedly returned nil") }
26+
XCTAssert(resultDecoded.count == 0)
27+
28+
print("Testing Base58 Encode \"\(vector)\"")
29+
let resultEncoded1 = vector.base58EncodedString
30+
XCTAssert(resultEncoded1 == vector)
31+
32+
print("Testing Base58 Encode [empty]")
33+
let arr = resultDecoded.withUnsafeBytes { Array($0) }
34+
let resultEncoded2 = arr.base58EncodedString
35+
XCTAssert(resultEncoded2 == vector)
36+
}
37+
38+
// test a reference string "Hello World!"
39+
func testBase58HelloWorld() throws {
40+
let vector = "2NEpo7TZRRrLZSi2U"
41+
let expected = "Hello World!"
42+
43+
print("Testing Base58 Decode \"\(vector)\"")
44+
guard let resultDecoded = vector.base58DecodedData else { return XCTFail("base58 decode unexpectedly returned nil") }
45+
let arr = resultDecoded.withUnsafeBytes { Array($0) }
46+
let str = String(bytes: arr, encoding: .utf8)
47+
XCTAssert(str == expected)
48+
49+
print("Testing Base58 Encode \"\(expected)\"")
50+
let resultEncoded = expected.base58EncodedString
51+
XCTAssert(resultEncoded == vector)
52+
}
53+
54+
// test a reference string "The quick brown fox jumps over the lazy dog."
55+
func testBase58LazyFox() throws {
56+
let vector = "USm3fpXnKG5EUBx2ndxBDMPVciP5hGey2Jh4NDv6gmeo1LkMeiKrLJUUBk6Z"
57+
let expected = "The quick brown fox jumps over the lazy dog."
58+
59+
print("Testing Base58 Decode \"\( vector )\"")
60+
guard let resultDecoded = vector.base58DecodedData else { return XCTFail("base58 decode unexpectedly returned nil") }
61+
let arr = resultDecoded.withUnsafeBytes { Array($0) }
62+
let str = String(bytes: arr, encoding: .utf8)
63+
XCTAssert(str == expected)
64+
65+
print("Testing Base58 Encode \"\(expected)\"")
66+
let resultEncoded = expected.base58EncodedString
67+
XCTAssert(resultEncoded == vector)
68+
}
69+
70+
// test a reference binary value "0x000000287fb4cd" (tested as a hex string to validate length) **corrected from ref document
71+
func testBase58HexData() throws {
72+
let vector = "111233QC4"
73+
let expected = "0x000000287fb4cd"
74+
75+
print("Testing Base58 Decode \"\(vector)\"")
76+
guard let resultDecoded = vector.base58DecodedData else { return XCTFail("base58 decode unexpectedly returned nil") }
77+
let str = resultDecoded.toHexString().addHexPrefix()
78+
XCTAssert(str == expected)
79+
80+
print("Testing Base58 Encode \(expected)")
81+
let arr = resultDecoded.withUnsafeBytes { Array($0) }
82+
let resultEncoded = arr.base58EncodedString
83+
XCTAssert(resultEncoded == vector)
84+
}
85+
86+
// test all zero encoded data from issue 424
87+
func testBase58Zero() throws {
88+
let vector = "11111111111111111111111111111111"
89+
let expected = "0x0000000000000000000000000000000000000000000000000000000000000000"
90+
91+
print("Testing Base58 Decode \"\(vector)\"")
92+
guard let resultDecoded = vector.base58DecodedData else { return XCTFail("base58 decode unexpectedly returned nil") }
93+
let str = resultDecoded.toHexString().addHexPrefix()
94+
XCTAssert(str == expected)
95+
96+
print("Testing Base58 Encode \(expected)")
97+
let arr = resultDecoded.withUnsafeBytes { Array($0) }
98+
let resultEncoded = arr.base58EncodedString
99+
XCTAssert(resultEncoded == vector)
100+
}
101+
102+
}

Tests/web3swiftTests/remoteTests/RemoteTests.xctestplan

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"testTargets" : [
1515
{
1616
"skippedTests" : [
17+
"DataConversionTests",
1718
"EIP712Tests",
1819
"web3swiftAdvancedABIv2Tests",
1920
"web3swiftBasicLocalNodeTests",

web3swift.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@
189189
5CF7E8BA276B79380009900F /* web3swiftGanacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CF7E8B5276B79380009900F /* web3swiftGanacheTests.swift */; };
190190
5CF7E8BB276B79380009900F /* web3swiftENSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CF7E8B6276B79380009900F /* web3swiftENSTests.swift */; };
191191
5CF7E8BC276B79380009900F /* web3swiftWebsocketTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CF7E8B7276B79380009900F /* web3swiftWebsocketTests.swift */; };
192+
604FA4FF27ECBDC80021108F /* DataConversionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 604FA4FE27ECBDC80021108F /* DataConversionTests.swift */; };
192193
CB50A52827060BD600D7E39B /* EIP712Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB50A52727060BD600D7E39B /* EIP712Tests.swift */; };
193194
E22A911F241ED71A00EC1021 /* browser.min.js in Resources */ = {isa = PBXBuildFile; fileRef = E22A911E241ED71A00EC1021 /* browser.min.js */; };
194195
E2B76710241ED479007EBFE3 /* browser.js in Resources */ = {isa = PBXBuildFile; fileRef = E2B7670F241ED479007EBFE3 /* browser.js */; };
@@ -405,6 +406,7 @@
405406
5CF7E8B5276B79380009900F /* web3swiftGanacheTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = web3swiftGanacheTests.swift; sourceTree = "<group>"; };
406407
5CF7E8B6276B79380009900F /* web3swiftENSTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = web3swiftENSTests.swift; sourceTree = "<group>"; };
407408
5CF7E8B7276B79380009900F /* web3swiftWebsocketTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = web3swiftWebsocketTests.swift; sourceTree = "<group>"; };
409+
604FA4FE27ECBDC80021108F /* DataConversionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataConversionTests.swift; sourceTree = "<group>"; };
408410
CB50A52727060BD600D7E39B /* EIP712Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EIP712Tests.swift; sourceTree = "<group>"; };
409411
CB50A52927060C5300D7E39B /* EIP712.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EIP712.swift; sourceTree = "<group>"; };
410412
E22A911E241ED71A00EC1021 /* browser.min.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = browser.min.js; sourceTree = "<group>"; };
@@ -980,6 +982,7 @@
980982
E252E68126B542D000717C16 /* localTests */ = {
981983
isa = PBXGroup;
982984
children = (
985+
604FA4FE27ECBDC80021108F /* DataConversionTests.swift */,
983986
5CF7E8A0276B79290009900F /* web3swiftAdvancedABIv2Tests.swift */,
984987
5CF7E89C276B79280009900F /* web3swiftBasicLocalNodeTests.swift */,
985988
5CF7E8A1276B79290009900F /* web3swiftEIP67Tests.swift */,
@@ -1384,6 +1387,7 @@
13841387
5CF7E8B2276B792A0009900F /* web3swiftEIP67Tests.swift in Sources */,
13851388
5CF7E8AE276B792A0009900F /* web3swiftPromisesTests.swift in Sources */,
13861389
5CF7E8A2276B79290009900F /* web3swiftEIP681Tests.swift in Sources */,
1390+
604FA4FF27ECBDC80021108F /* DataConversionTests.swift in Sources */,
13871391
5CF7E8B1276B792A0009900F /* web3swiftAdvancedABIv2Tests.swift in Sources */,
13881392
5CF7E8A6276B792A0009900F /* web3swiftHelpers.swift in Sources */,
13891393
5CF7E8BA276B79380009900F /* web3swiftGanacheTests.swift in Sources */,

0 commit comments

Comments
 (0)