Mercurial > vim
comparison src/testdir/test_netbeans.py @ 20087:b378f860d4ab v8.2.0599
patch 8.2.0599: Netbeans interface insufficiently tested
Commit: https://github.com/vim/vim/commit/173d841e86cf205d8e398091b1da7bb4951714f9
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Apr 19 14:02:26 2020 +0200
patch 8.2.0599: Netbeans interface insufficiently tested
Problem: Netbeans interface insufficiently tested.
Solution: Add more tests. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/5921)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 19 Apr 2020 14:15:04 +0200 |
parents | cd6daebf47ae |
children | 116c7bd5e980 |
comparison
equal
deleted
inserted
replaced
20086:4c19b9038b6b | 20087:b378f860d4ab |
---|---|
8 from __future__ import print_function | 8 from __future__ import print_function |
9 import socket | 9 import socket |
10 import sys | 10 import sys |
11 import time | 11 import time |
12 import threading | 12 import threading |
13 import re | |
13 | 14 |
14 try: | 15 try: |
15 # Python 3 | 16 # Python 3 |
16 import socketserver | 17 import socketserver |
17 except ImportError: | 18 except ImportError: |
18 # Python 2 | 19 # Python 2 |
19 import SocketServer as socketserver | 20 import SocketServer as socketserver |
20 | 21 |
21 class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler): | 22 class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler): |
22 | 23 |
24 def process_msgs(self, msgbuf): | |
25 # Process all the received netbeans commands/responses/events from Vim. | |
26 # Each one is separated by a newline character. If a partial command | |
27 # is received, process it later after the rest of it is received. | |
28 while True: | |
29 (line, sep, rest) = msgbuf.partition('\n') | |
30 if sep == '': | |
31 # received partial line | |
32 return line | |
33 msgbuf = rest | |
34 | |
35 # Process a command only after receiving a newline. | |
36 response = '' | |
37 if line.find('Xcmdbuf') > 0: | |
38 name = line.split('"')[1] | |
39 response = '1:putBufferNumber!15 "' + name + '"\n' | |
40 response += '1:startDocumentListen!16\n' | |
41 elif re.match('1:insert=.* "\\\\n"', line): | |
42 # extract the command from the previous line | |
43 cmd = re.search('.*"(.*)"', self.prev_line).group(1) | |
44 testmap = { | |
45 'getCursor_Test' : '0:getCursor/30\n', | |
46 'E627_Test' : '0 setReadOnly!31\n', | |
47 'E628_Test' : '0:setReadOnly 32\n', | |
48 'E632_Test' : '0:getLength/33\n', | |
49 'E633_Test' : '0:getText/34\n', | |
50 'E634_Test' : '0:remove/35 1 1\n', | |
51 'E635_Test' : '0:insert/36 0 "line1\\n"\n', | |
52 'E636_Test' : '0:create!37\n', | |
53 'E637_Test' : '0:startDocumentListen!38\n', | |
54 'E638_Test' : '0:stopDocumentListen!39\n', | |
55 'E639_Test' : '0:setTitle!40 "Title"\n', | |
56 'E640_Test' : '0:initDone!41\n', | |
57 'E641_Test' : '0:putBufferNumber!42 "XSomeBuf"\n', | |
58 'E642_Test' : '9:putBufferNumber!43 "XInvalidBuf"\n', | |
59 'E643_Test' : '0:setFullName!44 "XSomeBuf"\n', | |
60 'E644_Test' : '0:editFile!45 "Xfile3"\n', | |
61 'E645_Test' : '0:setVisible!46 T\n', | |
62 'E646_Test' : '0:setModified!47 T\n', | |
63 'E647_Test' : '0:setDot!48 1/1\n', | |
64 'E648_Test' : '0:close!49\n', | |
65 'E650_Test' : '0:defineAnnoType!50 1 "abc" "a" "a" 1 1\n', | |
66 'E651_Test' : '0:addAnno!51 1 1 1 1\n', | |
67 'E652_Test' : '0:getAnno/52 8\n', | |
68 'editFile_Test' : '2:editFile!53 "Xfile3"\n', | |
69 'getLength_Test' : '2:getLength/54\n', | |
70 'getModified_Test' : '2:getModified/55\n', | |
71 'getText_Test' : '2:getText/56\n', | |
72 'setDot_Test' : '2:setDot!57 3/6\n', | |
73 'startDocumentListen_Test' : '2:startDocumentListen!58\n', | |
74 'stopDocumentListen_Test' : '2:stopDocumentListen!59\n', | |
75 'define_anno_Test' : '2:defineAnnoType!60 1 "s1" "x" "=>" blue none\n', | |
76 'E532_Test' : '2:defineAnnoType!61 1 "s1" "x" "=>" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa none\n', | |
77 'add_anno_Test' : '2:addAnno!62 1 1 2/1 0\n', | |
78 'get_anno_Test' : '2:getAnno/63 1\n', | |
79 'remove_anno_Test' : '2:removeAnno!64 1\n', | |
80 'getModifiedAll_Test' : '0:getModified/65\n', | |
81 'create_Test' : '3:create!66\n', | |
82 'setTitle_Test' : '3:setTitle!67 "Xfile4"\n', | |
83 'setFullName_Test' : '3:setFullName!68 "Xfile4"\n', | |
84 'initDone_Test' : '3:initDone!69\n', | |
85 'setVisible_Test' : '3:setVisible!70 T\n', | |
86 'setModtime_Test' : '3:setModtime!71 6\n', | |
87 'insert_Test' : '3:insert/72 0 "line1\\nline2\\n"\n', | |
88 'remove_Test' : '3:remove/73 3 4\n', | |
89 'remove_invalid_offset_Test' : '3:remove/74 900 4\n', | |
90 'remove_invalid_count_Test' : '3:remove/75 1 800\n', | |
91 'guard_Test' : '3:guard!76 8 7\n', | |
92 'setModified_Test' : '3:setModified!77 T\n', | |
93 'insertDone_Test' : '3:insertDone!78 T F\n', | |
94 'saveDone_Test' : '3:saveDone!79\n', | |
95 'invalidcmd_Test' : '3:invalidcmd!80\n', | |
96 'invalidfunc_Test' : '3:invalidfunc/81\n', | |
97 'removeAnno_fail_Test' : '0:removeAnno/82 1\n', | |
98 'guard_fail_Test' : '0:guard/83 1 1\n', | |
99 'save_fail_Test' : '0:save/84\n', | |
100 'netbeansBuffer_fail_Test' : '0:netbeansBuffer/85 T\n', | |
101 'setExitDelay_Test' : '0:setExitDelay!86 2\n', | |
102 'setReadOnly_Test' : '3:setReadOnly!87\n', | |
103 'close_Test' : '3:close!88\n', | |
104 'specialKeys_Test' : '0:specialKeys!89 "F12 F13"\n', | |
105 'detach_Test' : '2:close!90\n1:close!91\nDETACH\n' | |
106 } | |
107 # execute the specified test | |
108 if cmd not in testmap: | |
109 print("=== invalid command %s ===" % (cmd)) | |
110 else: | |
111 response = testmap[cmd] | |
112 elif line.find('disconnect') > 0: | |
113 # we're done | |
114 self.server.shutdown() | |
115 return | |
116 | |
117 # save the current line, this is used as the test to run after | |
118 # receiving a newline only line. | |
119 self.prev_line = line | |
120 | |
121 if len(response) > 0: | |
122 self.request.sendall(response.encode('utf-8')) | |
123 # Write the respoinse into the file, so that the test can knows | |
124 # the command was sent. | |
125 with open("Xnetbeans", "a") as myfile: | |
126 myfile.write('send: ' + response) | |
127 if self.debug: | |
128 with open("save_Xnetbeans", "a") as myfile: | |
129 myfile.write('send: ' + response) | |
130 | |
23 def handle(self): | 131 def handle(self): |
24 print("=== socket opened ===") | 132 print("=== socket opened ===") |
133 # To preserve the Xnetbeans file as save_Xnetbeans, set debug to 1 | |
134 self.debug = 0 | |
135 self.prev_line = '' | |
136 msgbuf = '' | |
25 while True: | 137 while True: |
26 try: | 138 try: |
27 received = self.request.recv(4096).decode('utf-8') | 139 received = self.request.recv(4096).decode('utf-8') |
28 except socket.error: | 140 except socket.error: |
29 print("=== socket error ===") | 141 print("=== socket error ===") |
38 | 150 |
39 # Write the received line into the file, so that the test can check | 151 # Write the received line into the file, so that the test can check |
40 # what happened. | 152 # what happened. |
41 with open("Xnetbeans", "a") as myfile: | 153 with open("Xnetbeans", "a") as myfile: |
42 myfile.write(received) | 154 myfile.write(received) |
155 if self.debug: | |
156 with open("save_Xnetbeans", "a") as myfile: | |
157 myfile.write(received) | |
43 | 158 |
44 response = '' | 159 # Can receive more than one line in a response or a partial line. |
45 if received.find('XREADME.txt') > 0: | 160 # Accumulate all the received characters and process one line at |
46 name = received.split('"')[1] | 161 # a time. |
47 response = '5:putBufferNumber!33 "' + name + '"\n' | 162 msgbuf += received |
48 response += '5:setDot!1 3/19\n' | 163 msgbuf = self.process_msgs(msgbuf) |
49 elif received.find('disconnect') > 0: | |
50 # we're done | |
51 self.server.shutdown() | |
52 return | |
53 | |
54 if len(response) > 0: | |
55 self.request.sendall(response.encode('utf-8')) | |
56 # Write the respoinse into the file, so that the test can knows | |
57 # the command was sent. | |
58 with open("Xnetbeans", "a") as myfile: | |
59 myfile.write('send: ' + response) | |
60 | 164 |
61 class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer): | 165 class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer): |
62 pass | 166 pass |
63 | 167 |
64 def writePortInFile(port): | 168 def writePortInFile(port): |