| 
									
										
										
										
											2016-04-14 18:18:24 +02:00
										 |  |  | // Copyright 2016 The go-ethereum Authors | 
					
						
							| 
									
										
										
										
											2016-02-15 16:42:39 +01:00
										 |  |  | // This file is part of the go-ethereum library. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // The go-ethereum library is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  | // it under the terms of the GNU Lesser General Public License as published by | 
					
						
							|  |  |  | // the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  | // (at your option) any later version. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // The go-ethereum library is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
					
						
							|  |  |  | // GNU Lesser General Public License for more details. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // You should have received a copy of the GNU Lesser General Public License | 
					
						
							|  |  |  | // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package jsre | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2016-05-06 12:40:23 +03:00
										 |  |  | 	"os" | 
					
						
							| 
									
										
										
										
											2016-02-15 16:42:39 +01:00
										 |  |  | 	"reflect" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestCompleteKeywords(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2016-05-06 12:40:23 +03:00
										 |  |  | 	re := New("", os.Stdout) | 
					
						
							| 
									
										
										
										
											2016-02-15 16:42:39 +01:00
										 |  |  | 	re.Run(` | 
					
						
							|  |  |  | 		function theClass() { | 
					
						
							|  |  |  | 			this.foo = 3; | 
					
						
							|  |  |  | 			this.gazonk = {xyz: 4}; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		theClass.prototype.someMethod = function () {}; | 
					
						
							|  |  |  |   		var x = new theClass(); | 
					
						
							|  |  |  |   		var y = new theClass(); | 
					
						
							|  |  |  | 		y.someMethod = function override() {}; | 
					
						
							|  |  |  | 	`) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var tests = []struct { | 
					
						
							|  |  |  | 		input string | 
					
						
							|  |  |  | 		want  []string | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			input: "x", | 
					
						
							| 
									
										
										
										
											2016-02-20 14:58:06 +01:00
										 |  |  | 			want:  []string{"x."}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			input: "x.someMethod", | 
					
						
							|  |  |  | 			want:  []string{"x.someMethod("}, | 
					
						
							| 
									
										
										
										
											2016-02-15 16:42:39 +01:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			input: "x.", | 
					
						
							|  |  |  | 			want: []string{ | 
					
						
							|  |  |  | 				"x.constructor", | 
					
						
							|  |  |  | 				"x.foo", | 
					
						
							|  |  |  | 				"x.gazonk", | 
					
						
							|  |  |  | 				"x.someMethod", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			input: "y.", | 
					
						
							|  |  |  | 			want: []string{ | 
					
						
							|  |  |  | 				"y.constructor", | 
					
						
							|  |  |  | 				"y.foo", | 
					
						
							|  |  |  | 				"y.gazonk", | 
					
						
							|  |  |  | 				"y.someMethod", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			input: "x.gazonk.", | 
					
						
							|  |  |  | 			want: []string{ | 
					
						
							|  |  |  | 				"x.gazonk.constructor", | 
					
						
							|  |  |  | 				"x.gazonk.hasOwnProperty", | 
					
						
							|  |  |  | 				"x.gazonk.isPrototypeOf", | 
					
						
							|  |  |  | 				"x.gazonk.propertyIsEnumerable", | 
					
						
							|  |  |  | 				"x.gazonk.toLocaleString", | 
					
						
							|  |  |  | 				"x.gazonk.toString", | 
					
						
							|  |  |  | 				"x.gazonk.valueOf", | 
					
						
							|  |  |  | 				"x.gazonk.xyz", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	for _, test := range tests { | 
					
						
							|  |  |  | 		cs := re.CompleteKeywords(test.input) | 
					
						
							|  |  |  | 		if !reflect.DeepEqual(cs, test.want) { | 
					
						
							|  |  |  | 			t.Errorf("wrong completions for %q\ngot  %v\nwant %v", test.input, cs, test.want) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |