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