1 import ExpoModulesTestCore 2 3 @testable import ExpoModulesCore 4 5 class PersistentFileLogSpec: ExpoSpec { specnull6 override func spec() { 7 beforeEach { 8 self.clearEntriesSync() 9 } 10 11 it("cleared file has 0 entries") { 12 let entries = self.log.readEntries() 13 expect(entries.count).to(be(0)) 14 } 15 16 it("append one entry works") { 17 self.appendEntrySync(entry: "Test string 1") 18 let entries = self.log.readEntries() 19 expect(entries).notTo(beNil()) 20 expect(entries.count).to(be(1)) 21 expect(entries[0]).to(equal("Test string 1")) 22 } 23 24 it("append three entries works") { 25 self.appendEntrySync(entry: "Test string 1") 26 self.appendEntrySync(entry: "Test string 2") 27 self.appendEntrySync(entry: "Test string 3") 28 let entries = self.log.readEntries() 29 expect(entries.count).to(be(3)) 30 expect(entries[0]).to(equal("Test string 1")) 31 expect(entries[1]).to(equal("Test string 2")) 32 } 33 34 it("filter entries works") { 35 self.appendEntrySync(entry: "Test string 1") 36 self.appendEntrySync(entry: "Test string 2") 37 self.appendEntrySync(entry: "Test string 3") 38 self.filterEntriesSync { entry in 39 entry.contains("2") 40 } 41 let entries = self.log.readEntries() 42 expect(entries).notTo(beNil()) 43 expect(entries.count).to(be(1)) 44 expect(entries[0]).to(equal("Test string 2")) 45 } 46 } 47 48 // Private fields and methods 49 50 let log = PersistentFileLog(category: "dev.expo.modules.test.persistentlog") 51 clearEntriesSyncnull52 func clearEntriesSync() { 53 let expectation = self.expectation(description: "entries cleared") 54 log.clearEntries { _ in 55 expectation.fulfill() 56 } 57 wait(for: [expectation], timeout: 0.5) 58 } 59 filterEntriesSyncnull60 func filterEntriesSync(filter: @escaping PersistentFileLogFilter) { 61 let expectation = self.expectation(description: "entries filtered") 62 log.purgeEntriesNotMatchingFilter(filter: filter) { _ in 63 expectation.fulfill() 64 } 65 wait(for: [expectation], timeout: 0.5) 66 } 67 appendEntrySyncnull68 func appendEntrySync(entry: String) { 69 let expectation = self.expectation(description: "entry appended") 70 log.appendEntry(entry: entry) { _ in 71 expectation.fulfill() 72 } 73 wait(for: [expectation], timeout: 0.5) 74 } 75 } 76