feat(StringWrapper): add support for JS slice method to string
This commit is contained in:
		
							parent
							
								
									bced3aaa17
								
							
						
					
					
						commit
						0808eeaa0c
					
				| @ -94,6 +94,14 @@ class StringWrapper { | |||||||
|     return s.startsWith(start); |     return s.startsWith(start); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   static String slice(String s, [int start = 0, int end]) { | ||||||
|  |     //in JS if start > end an empty string is returned | ||||||
|  |     if(end != null && start > end) { | ||||||
|  |       return ""; | ||||||
|  |     } | ||||||
|  |     return s.substring(_startOffset(s, start), _endOffset(s, end)); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   static String substring(String s, int start, [int end]) { |   static String substring(String s, int start, [int end]) { | ||||||
|     return s.substring(start, end); |     return s.substring(start, end); | ||||||
|   } |   } | ||||||
| @ -107,6 +115,21 @@ class StringWrapper { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static int compare(String a, String b) => a.compareTo(b); |   static int compare(String a, String b) => a.compareTo(b); | ||||||
|  | 
 | ||||||
|  |   // JS slice function can take start < 0 which indicates a position relative to | ||||||
|  |   // the end of the string | ||||||
|  |   static int _startOffset(String s, int start) { | ||||||
|  |     int len = s.length; | ||||||
|  |     return start = start < 0 ? math.max(len + start, 0) : math.min(start, len); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // JS slice function can take end < 0 which indicates a position relative to | ||||||
|  |   // the end of the string | ||||||
|  |   static int _endOffset(String s, int end) { | ||||||
|  |     int len = s.length; | ||||||
|  |     if (end == null) return len; | ||||||
|  |     return end < 0 ? math.max(len + end, 0) : math.min(end, len); | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| class StringJoiner { | class StringJoiner { | ||||||
|  | |||||||
| @ -151,6 +151,10 @@ export class StringWrapper { | |||||||
|     return s.replace(from, replace); |     return s.replace(from, replace); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   static slice<T>(s: string, from: number = 0, to: number = null): string { | ||||||
|  |     return s.slice(from, to === null ? undefined : to); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   static toUpperCase(s: string): string { return s.toUpperCase(); } |   static toUpperCase(s: string): string { return s.toUpperCase(); } | ||||||
| 
 | 
 | ||||||
|   static toLowerCase(s: string): string { return s.toLowerCase(); } |   static toLowerCase(s: string): string { return s.toLowerCase(); } | ||||||
|  | |||||||
| @ -42,7 +42,7 @@ export function main() { | |||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   describe('String', () => { |   describe('String', () => { | ||||||
|     var upper, lower; |     var upper, lower, s; | ||||||
| 
 | 
 | ||||||
|     beforeEach(() => { |     beforeEach(() => { | ||||||
|       upper = 'SOMETHING'; |       upper = 'SOMETHING'; | ||||||
| @ -60,5 +60,25 @@ export function main() { | |||||||
| 
 | 
 | ||||||
|       expect(str).toEqual(lower); |       expect(str).toEqual(lower); | ||||||
|     }); |     }); | ||||||
|  | 
 | ||||||
|  |     describe('slice', () => { | ||||||
|  |       beforeEach(() => { s = "abcdefghij"; }); | ||||||
|  | 
 | ||||||
|  |       it('should return the whole string if neither start nor end are specified', | ||||||
|  |          () => { expect(StringWrapper.slice(s)).toEqual("abcdefghij"); }); | ||||||
|  | 
 | ||||||
|  |       it('should return up to the end if end is not specified', | ||||||
|  |          () => { expect(StringWrapper.slice(s, 1)).toEqual("bcdefghij"); }); | ||||||
|  | 
 | ||||||
|  |       it('should support negative start', | ||||||
|  |          () => { expect(StringWrapper.slice(s, -1)).toEqual("j"); }); | ||||||
|  | 
 | ||||||
|  |       it('should support negative end', | ||||||
|  |          () => { expect(StringWrapper.slice(s, -3, -1)).toEqual("hi"); }); | ||||||
|  | 
 | ||||||
|  |       it('should return empty string if start is greater than end', | ||||||
|  |          () => { expect(StringWrapper.slice(s, 4, 2)).toEqual(""); }); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|   }); |   }); | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user