@@ -33,6 +33,44 @@ void main() {
3333 });
3434 });
3535
36+ group ('metadataByKey' , () {
37+ List <File > files = [File ('./example/example.traindown' )];
38+ Inspector subject = Inspector .from_files (files);
39+
40+ Map <String , Set <String >> expected = {
41+ "bw" : {"230" },
42+ "session meta key 1" : {"session meta \" value\" 1" },
43+ "session meta key '2'" : {"session meta value 2" },
44+ "3rd session meta key" : {"3rd session meta value" },
45+ };
46+
47+ test ('Session scope' , () {
48+ Map <String , Set <String >> meta = subject.metadataByKey ();
49+ expect (meta.length, 4 );
50+ expect (meta, equals (expected));
51+ });
52+
53+ test ('Movement scope' , () {
54+ expected["2nd movement meta key 1" ] = {"2nd movement meta value 1" };
55+ expected["Movement 2 meta key 2" ] = {"Movement 2 meta key 2" };
56+ Map <String , Set <String >> meta =
57+ subject.metadataByKey (TraindownScope .movement);
58+ expect (meta.length, 6 );
59+ expect (meta, equals (expected));
60+ });
61+
62+ test ('Performance scope' , () {
63+ expected["2nd movement meta key 1" ] = {"2nd movement meta value 1" };
64+ expected["Movement 2 meta key 2" ] = {"Movement 2 meta key 2" };
65+ expected["302 meta key 1" ] = {"302 meta value 1" };
66+ expected["Meta key 2 for 302" ] = {"Meta value 2 for 302" };
67+ Map <String , Set <String >> meta =
68+ subject.metadataByKey (TraindownScope .performance);
69+ expect (meta.length, 8 );
70+ expect (meta, equals (expected));
71+ });
72+ });
73+
3674 group ('movementNames' , () {
3775 test ('Basic use' , () {
3876 List <File > files = [File ('./example/example.traindown' )];
@@ -83,6 +121,99 @@ void main() {
83121 });
84122 });
85123
124+ group ('sessionQuery' , () {
125+ List <Token > tokens1 = [
126+ Token (TokenType .DateTime , "2020-01-01" ),
127+ Token (TokenType .MetaKey , "Your" ),
128+ Token (TokenType .MetaValue , "Mom" ),
129+ Token (TokenType .MetaKey , "Foo" ),
130+ Token (TokenType .MetaValue , "Bar" ),
131+ ];
132+ Session session1 = Session (tokens1);
133+
134+ List <Token > tokens2 = [
135+ Token (TokenType .DateTime , "2021-01-01" ),
136+ Token (TokenType .MetaKey , "Your" ),
137+ Token (TokenType .MetaValue , "Mom" ),
138+ Token (TokenType .MetaKey , "Bar" ),
139+ Token (TokenType .MetaValue , "Baz" ),
140+ ];
141+ Session session2 = Session (tokens2);
142+
143+ Inspector subject = Inspector ([session1, session2]);
144+
145+ test ('One kvp that does not match key or value' , () {
146+ expect (subject.sessionQuery (metaLike: {"test" : "test" }), equals ([]));
147+ });
148+
149+ test ('One kvp that does match key but not value' , () {
150+ expect (subject.sessionQuery (metaLike: {"Your" : "test" }), equals ([]));
151+ });
152+
153+ test ('One kvp that does match key and value on single' , () {
154+ List <Session > results = subject.sessionQuery (metaLike: {"Foo" : "Bar" });
155+ expect (results.length, 1 );
156+ expect (results.contains (session1), true );
157+ });
158+
159+ test ('One kvp that does match key and value on multiple' , () {
160+ List <Session > results = subject.sessionQuery (metaLike: {"Your" : "Mom" });
161+ expect (results.length, 2 );
162+ expect (results.contains (session1), true );
163+ expect (results.contains (session2), true );
164+ });
165+
166+ test ('One kvp that does match key and value on single case insensitive key' ,
167+ () {
168+ List <Session > results = subject.sessionQuery (metaLike: {"FOO" : "Bar" });
169+ expect (results.length, 1 );
170+ expect (results.contains (session1), true );
171+ });
172+
173+ test (
174+ 'One kvp that does match key and value on multiple case insensitive key' ,
175+ () {
176+ List <Session > results = subject.sessionQuery (metaLike: {"YOUR" : "Mom" });
177+ expect (results.length, 2 );
178+ expect (results.contains (session1), true );
179+ expect (results.contains (session2), true );
180+ });
181+
182+ test (
183+ 'One kvp that does match key and value on single case insensitive value' ,
184+ () {
185+ List <Session > results = subject.sessionQuery (metaLike: {"Foo" : "BAR" });
186+ expect (results.length, 1 );
187+ expect (results.contains (session1), true );
188+ });
189+
190+ test (
191+ 'One kvp that does match key and value on multiple case insensitive value' ,
192+ () {
193+ List <Session > results = subject.sessionQuery (metaLike: {"Your" : "MOM" });
194+ expect (results.length, 2 );
195+ expect (results.contains (session1), true );
196+ expect (results.contains (session2), true );
197+ });
198+
199+ test (
200+ 'One kvp that does match key and value on single case insensitive key and value' ,
201+ () {
202+ List <Session > results = subject.sessionQuery (metaLike: {"FOO" : "BAR" });
203+ expect (results.length, 1 );
204+ expect (results.contains (session1), true );
205+ });
206+
207+ test (
208+ 'One kvp that does match key and value on multiple case insensitive key and value' ,
209+ () {
210+ List <Session > results = subject.sessionQuery (metaLike: {"YOUR" : "MOM" });
211+ expect (results.length, 2 );
212+ expect (results.contains (session1), true );
213+ expect (results.contains (session2), true );
214+ });
215+ });
216+
86217 group ('validFile' , () {
87218 test ('It returns true for allowed extensions' , () {
88219 Inspector subject = Inspector ([], ['.traindown' ]);
0 commit comments