50 lines
		
	
	
		
			968 B
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			968 B
		
	
	
	
		
			V
		
	
	
| fn test_flag_parsing() {
 | |
| 	mut rest := '-lGlfw -f gl2,-ltest_nice_meme,-l cc,-Ldl test.o a.o ' //, whatever.o'
 | |
| 	result := ['-l', 'Glfw', 
 | |
| 			   '-f', 'gl2', 
 | |
| 			   '-l', 'test_nice_meme', 
 | |
| 			   '-l', 'cc',
 | |
| 			   '-L', 'dl',
 | |
| 			   '', 'test.o',
 | |
| 			   '', 'a.o']
 | |
| 
 | |
| 	mut flags := []string
 | |
| 	for {
 | |
| 		mut base := rest
 | |
| 
 | |
| 		fl := if rest.starts_with('-') {
 | |
| 			base = rest.right(2).trim_space()
 | |
| 			rest.left(2)
 | |
| 		} else {
 | |
| 			''
 | |
| 		}
 | |
| 
 | |
| 		// Which ever one of these is lowest we use
 | |
| 		// TODO: we really shouldnt support all of these cmon
 | |
| 		mut lowest := base.index('-')
 | |
| 		for x in [base.index(' '), base.index(',')] {
 | |
| 			if (x < lowest && x != -1) || lowest == -1 {
 | |
| 				lowest = x
 | |
| 			}
 | |
| 		}
 | |
| 		arg := if lowest != -1 {
 | |
| 			rest = base.right(lowest).trim_space().trim(',')
 | |
| 			base.left(lowest).trim_space().trim(',')
 | |
| 		} else {
 | |
| 			rest = ''
 | |
| 			base.trim_space()
 | |
| 		}
 | |
| 
 | |
| 		flags << fl
 | |
| 		flags << arg
 | |
| 
 | |
| 		if rest.len == 0 {
 | |
| 			break
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	for i, f in flags {
 | |
| 		assert f == result[i] 
 | |
| 	}
 | |
| }
 |