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):