Best Python code snippet using slash
test_plugin_edit_structure.py
Source:test_plugin_edit_structure.py  
1# -*- coding: utf-8 -*-2import unittest3import sys4sys.path.append(u'../ftplugin')5import vim6from orgmode._vim import ORGMODE7counter = 08class EditStructureTestCase(unittest.TestCase):9	def setUp(self):10		global counter11		counter += 112		vim.CMDHISTORY = []13		vim.CMDRESULTS = {}14		vim.EVALHISTORY = []15		vim.EVALRESULTS = {16				# no org_todo_keywords for b17				u'exists("b:org_todo_keywords")'.encode(u'utf-8'): '0'.encode(u'utf-8'),18				# global values for org_todo_keywords19				u'exists("g:org_todo_keywords")'.encode(u'utf-8'): '1'.encode(u'utf-8'),20				u'g:org_todo_keywords'.encode(u'utf-8'): [u'TODO'.encode(u'utf-8'), u'DONE'.encode(u'utf-8'), u'|'.encode(u'utf-8')],21				u'exists("g:org_improve_split_heading")'.encode(u'utf-8'): u'0'.encode(u'utf-8'),22				u'exists("b:org_improve_split_heading")'.encode(u'utf-8'): u'0'.encode(u'utf-8'),23				u'exists("g:org_debug")'.encode(u'utf-8'): u'0'.encode(u'utf-8'),24				u'exists("b:org_debug")'.encode(u'utf-8'): u'0'.encode(u'utf-8'),25				u'exists("*repeat#set()")'.encode(u'utf-8'): u'0'.encode(u'utf-8'),26				u'b:changedtick'.encode(u'utf-8'): (u'%d' % counter).encode(u'utf-8'),27				u'&ts'.encode(u'utf-8'): u'8'.encode(u'utf-8'),28				u'exists("g:org_tag_column")'.encode(u'utf-8'): u'0'.encode(u'utf-8'),29				u'exists("b:org_tag_column")'.encode(u'utf-8'): u'0'.encode(u'utf-8'),30				u"v:count".encode(u'utf-8'): u'0'.encode(u'utf-8')}31		if not u'EditStructure' in ORGMODE.plugins:32			ORGMODE.register_plugin(u'EditStructure')33		self.editstructure = ORGMODE.plugins[u'EditStructure']34		vim.current.buffer[:] = [ i.encode(u'utf-8') for i in u"""35* Ãberschrift 136Text 137Bla bla38** Ãberschrift 1.139Text 240Bla Bla bla41** Ãberschrift 1.242Text 343**** Ãberschrift 1.2.1.falsch44Bla Bla bla bla45*** Ãberschrift 1.2.146* Ãberschrift 247* Ãberschrift 348  asdf sdf49""".split(u'\n')]50	def test_new_heading_below_normal_behavior(self):51		vim.current.window.cursor = (1, 0)52		self.assertNotEqual(self.editstructure.new_heading(below=True), None)53		self.assertEqual(vim.current.buffer[0], u'* '.encode(u'utf-8'))54		self.assertEqual(vim.current.buffer[1], u'* Ãberschrift 1'.encode(u'utf-8'))55	def test_new_heading_above_normal_behavior(self):56		vim.current.window.cursor = (1, 1)57		self.assertNotEqual(self.editstructure.new_heading(below=False), None)58		self.assertEqual(vim.current.buffer[0], u'* '.encode(u'utf-8'))59		self.assertEqual(vim.current.buffer[1], u'* Ãberschrift 1'.encode(u'utf-8'))60	def test_new_heading_below(self):61		vim.current.window.cursor = (2, 0)62		vim.current.buffer[5] = u'** Ãberschrift 1.1 :Tag:'.encode(u'utf-8')63		self.assertNotEqual(self.editstructure.new_heading(below=True, insert_mode=False), None)64		self.assertEqual(vim.CMDHISTORY[-1], u'exe "normal 6gg"|startinsert!'.encode(u'utf-8'))65		self.assertEqual(vim.current.buffer[4], u'Bla bla'.encode(u'utf-8'))66		self.assertEqual(vim.current.buffer[5], u'* '.encode(u'utf-8'))67		self.assertEqual(vim.current.buffer[6], u'** Ãberschrift 1.1 :Tag:'.encode(u'utf-8'))68		self.assertEqual(vim.current.buffer[10], u'** Ãberschrift 1.2'.encode(u'utf-8'))69		self.assertEqual(vim.current.buffer[13], u'**** Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))70		self.assertEqual(vim.current.buffer[16], u'*** Ãberschrift 1.2.1'.encode(u'utf-8'))71		self.assertEqual(vim.current.buffer[17], u'* Ãberschrift 2'.encode(u'utf-8'))72	def test_new_heading_below_insert_mode(self):73		vim.current.window.cursor = (2, 1)74		self.assertNotEqual(self.editstructure.new_heading(below=True, insert_mode=True), None)75		self.assertEqual(vim.CMDHISTORY[-1], u'exe "normal 3gg"|startinsert!'.encode(u'utf-8'))76		self.assertEqual(vim.current.buffer[2], u'* Ãberschrift 1'.encode(u'utf-8'))77		self.assertEqual(vim.current.buffer[5], u'Bla bla'.encode(u'utf-8'))78		self.assertEqual(vim.current.buffer[6], u'** Ãberschrift 1.1'.encode(u'utf-8'))79		self.assertEqual(vim.current.buffer[10], u'** Ãberschrift 1.2'.encode(u'utf-8'))80		self.assertEqual(vim.current.buffer[13], u'**** Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))81		self.assertEqual(vim.current.buffer[16], u'*** Ãberschrift 1.2.1'.encode(u'utf-8'))82		self.assertEqual(vim.current.buffer[17], u'* Ãberschrift 2'.encode(u'utf-8'))83	def test_new_heading_below_split_text_at_the_end(self):84		vim.current.buffer[1] = u'* Ãberschriftx1'.encode(u'utf-8')85		vim.current.window.cursor = (2, 14)86		self.assertNotEqual(self.editstructure.new_heading(below=True, insert_mode=True), None)87		self.assertEqual(vim.CMDHISTORY[-1], u'exe "normal 3gg"|startinsert!'.encode(u'utf-8'))88		self.assertEqual(vim.current.buffer[2], u'* '.encode(u'utf-8'))89		self.assertEqual(vim.current.buffer[5], u'Bla bla'.encode(u'utf-8'))90		self.assertEqual(vim.current.buffer[6], u'** Ãberschrift 1.1'.encode(u'utf-8'))91		self.assertEqual(vim.current.buffer[10], u'** Ãberschrift 1.2'.encode(u'utf-8'))92		self.assertEqual(vim.current.buffer[13], u'**** Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))93		self.assertEqual(vim.current.buffer[16], u'*** Ãberschrift 1.2.1'.encode(u'utf-8'))94		self.assertEqual(vim.current.buffer[17], u'* Ãberschrift 2'.encode(u'utf-8'))95	def test_new_heading_below_split_text_at_the_end_insert_parts(self):96		vim.current.window.cursor = (2, 14)97		self.assertNotEqual(self.editstructure.new_heading(below=True, insert_mode=True), None)98		self.assertEqual(vim.CMDHISTORY[-1], u'exe "normal 3gg"|startinsert!'.encode(u'utf-8'))99		self.assertEqual(vim.current.buffer[2], u'* 1'.encode(u'utf-8'))100		self.assertEqual(vim.current.buffer[5], u'Bla bla'.encode(u'utf-8'))101		self.assertEqual(vim.current.buffer[6], u'** Ãberschrift 1.1'.encode(u'utf-8'))102		self.assertEqual(vim.current.buffer[10], u'** Ãberschrift 1.2'.encode(u'utf-8'))103		self.assertEqual(vim.current.buffer[13], u'**** Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))104		self.assertEqual(vim.current.buffer[16], u'*** Ãberschrift 1.2.1'.encode(u'utf-8'))105		self.assertEqual(vim.current.buffer[17], u'* Ãberschrift 2'.encode(u'utf-8'))106	def test_new_heading_below_in_the_middle(self):107		vim.current.window.cursor = (10, 0)108		self.assertNotEqual(self.editstructure.new_heading(below=True, insert_mode=True), None)109		self.assertEqual(vim.CMDHISTORY[-1], u'exe "normal 13gg"|startinsert!'.encode(u'utf-8'))110		self.assertEqual(vim.current.buffer[11], u''.encode(u'utf-8'))111		self.assertEqual(vim.current.buffer[12], u'** '.encode(u'utf-8'))112		self.assertEqual(vim.current.buffer[13], u'**** Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))113	def test_new_heading_below_in_the_middle2(self):114		vim.current.window.cursor = (13, 0)115		self.assertNotEqual(self.editstructure.new_heading(below=True, insert_mode=True), None)116		self.assertEqual(vim.CMDHISTORY[-1], u'exe "normal 16gg"|startinsert!'.encode(u'utf-8'))117		self.assertEqual(vim.current.buffer[14], u'Bla Bla bla bla'.encode(u'utf-8'))118		self.assertEqual(vim.current.buffer[15], u'**** '.encode(u'utf-8'))119		self.assertEqual(vim.current.buffer[16], u'*** Ãberschrift 1.2.1'.encode(u'utf-8'))120	def test_new_heading_below_in_the_middle3(self):121		vim.current.window.cursor = (16, 0)122		self.assertNotEqual(self.editstructure.new_heading(below=True, insert_mode=True), None)123		self.assertEqual(vim.CMDHISTORY[-1], u'exe "normal 17gg"|startinsert!'.encode(u'utf-8'))124		self.assertEqual(vim.current.buffer[15], u'*** Ãberschrift 1.2.1'.encode(u'utf-8'))125		self.assertEqual(vim.current.buffer[16], u'*** '.encode(u'utf-8'))126		self.assertEqual(vim.current.buffer[17], u'* Ãberschrift 2'.encode(u'utf-8'))127	def test_new_heading_below_at_the_end(self):128		vim.current.window.cursor = (18, 0)129		self.assertNotEqual(self.editstructure.new_heading(below=True, insert_mode=True), None)130		self.assertEqual(vim.CMDHISTORY[-1], u'exe "normal 21gg"|startinsert!'.encode(u'utf-8'))131		self.assertEqual(vim.current.buffer[19], u''.encode(u'utf-8'))132		self.assertEqual(vim.current.buffer[20], u'* '.encode(u'utf-8'))133		self.assertEqual(len(vim.current.buffer), 21)134	def test_new_heading_above(self):135		vim.current.window.cursor = (2, 0)136		self.assertNotEqual(self.editstructure.new_heading(below=False, insert_mode=True), None)137		self.assertEqual(vim.CMDHISTORY[-1], u'exe "normal 2gg"|startinsert!'.encode(u'utf-8'))138		self.assertEqual(vim.current.buffer[0], u''.encode(u'utf-8'))139		self.assertEqual(vim.current.buffer[1], u'* '.encode(u'utf-8'))140		self.assertEqual(vim.current.buffer[2], u'* Ãberschrift 1'.encode(u'utf-8'))141	def test_new_heading_above_in_the_middle(self):142		vim.current.window.cursor = (10, 0)143		self.assertNotEqual(self.editstructure.new_heading(below=False, insert_mode=True), None)144		self.assertEqual(vim.CMDHISTORY[-1], u'exe "normal 10gg"|startinsert!'.encode(u'utf-8'))145		self.assertEqual(vim.current.buffer[8], u'Bla Bla bla'.encode(u'utf-8'))146		self.assertEqual(vim.current.buffer[9], u'** '.encode(u'utf-8'))147		self.assertEqual(vim.current.buffer[10], u'** Ãberschrift 1.2'.encode(u'utf-8'))148	def test_new_heading_above_in_the_middle2(self):149		vim.current.window.cursor = (13, 0)150		self.assertNotEqual(self.editstructure.new_heading(below=False, insert_mode=True), None)151		self.assertEqual(vim.CMDHISTORY[-1], u'exe "normal 13gg"|startinsert!'.encode(u'utf-8'))152		self.assertEqual(vim.current.buffer[11], u''.encode(u'utf-8'))153		self.assertEqual(vim.current.buffer[12], u'**** '.encode(u'utf-8'))154		self.assertEqual(vim.current.buffer[13], u'**** Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))155	def test_new_heading_above_in_the_middle3(self):156		vim.current.window.cursor = (16, 0)157		self.assertNotEqual(self.editstructure.new_heading(below=False, insert_mode=True), None)158		self.assertEqual(vim.CMDHISTORY[-1], u'exe "normal 16gg"|startinsert!'.encode(u'utf-8'))159		self.assertEqual(vim.current.buffer[14], u'Bla Bla bla bla'.encode(u'utf-8'))160		self.assertEqual(vim.current.buffer[15], u'*** '.encode(u'utf-8'))161		self.assertEqual(vim.current.buffer[16], u'*** Ãberschrift 1.2.1'.encode(u'utf-8'))162	def test_new_heading_above_at_the_end(self):163		vim.current.window.cursor = (18, 0)164		self.assertNotEqual(self.editstructure.new_heading(below=False, insert_mode=True), None)165		self.assertEqual(vim.CMDHISTORY[-1], u'exe "normal 18gg"|startinsert!'.encode(u'utf-8'))166		self.assertEqual(vim.current.buffer[16], u'* Ãberschrift 2'.encode(u'utf-8'))167		self.assertEqual(vim.current.buffer[17], u'* '.encode(u'utf-8'))168		self.assertEqual(vim.current.buffer[18], u'* Ãberschrift 3'.encode(u'utf-8'))169	def test_new_heading_below_split_heading_title(self):170		vim.current.buffer[:] = [ i.encode(u'utf-8') for i in u"""171* Ãberschrift 1  :Tag:172Text 1173Bla bla174** Ãberschrift 1.1175Text 2176Bla Bla bla177** Ãberschrift 1.2178Text 3179**** Ãberschrift 1.2.1.falsch180Bla Bla bla bla181*** Ãberschrift 1.2.1182* Ãberschrift 2183* Ãberschrift 3184  asdf sdf185""".split(u'\n')]186		vim.current.window.cursor = (2, 6)187		self.assertNotEqual(self.editstructure.new_heading(insert_mode=True), None)188		self.assertEqual(vim.current.buffer[0], u''.encode(u'utf-8'))189		self.assertEqual(vim.current.buffer[1], u'* Ãber									:Tag:'.encode(u'utf-8'))190		self.assertEqual(vim.current.buffer[2], u'* schrift 1'.encode(u'utf-8'))191		self.assertEqual(vim.current.buffer[3], u'Text 1'.encode(u'utf-8'))192	def test_new_heading_below_split_heading_title_with_todo(self):193		vim.current.buffer[:] = [ i.encode(u'utf-8') for i in u"""194* TODO Ãberschrift 1  :Tag:195Text 1196Bla bla197** Ãberschrift 1.1198Text 2199Bla Bla bla200** Ãberschrift 1.2201Text 3202**** Ãberschrift 1.2.1.falsch203Bla Bla bla bla204*** Ãberschrift 1.2.1205* Ãberschrift 2206* Ãberschrift 3207  asdf sdf208""".split(u'\n')]209		vim.current.window.cursor = (2, 5)210		self.assertNotEqual(self.editstructure.new_heading(insert_mode=True), None)211		self.assertEqual(vim.current.buffer[0], u''.encode(u'utf-8'))212		self.assertEqual(vim.current.buffer[1], u'* TODO									:Tag:'.encode(u'utf-8'))213		self.assertEqual(vim.current.buffer[2], u'* Ãberschrift 1'.encode(u'utf-8'))214		self.assertEqual(vim.current.buffer[3], u'Text 1'.encode(u'utf-8'))215	def test_demote_heading(self):216		vim.current.window.cursor = (13, 0)217		self.assertNotEqual(self.editstructure.demote_heading(), None)218		self.assertEqual(vim.CMDHISTORY[-1], u'normal 13ggV15gg='.encode(u'utf-8'))219		self.assertEqual(vim.current.buffer[10], u'Text 3'.encode(u'utf-8'))220		self.assertEqual(vim.current.buffer[11], u''.encode(u'utf-8'))221		self.assertEqual(vim.current.buffer[12], u'***** Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))222		self.assertEqual(vim.current.buffer[13], u''.encode(u'utf-8'))223		# actually the indentation comes through vim, just the heading is updated224		self.assertEqual(vim.current.buffer[14], u'Bla Bla bla bla'.encode(u'utf-8'))225		self.assertEqual(vim.current.buffer[15], u'*** Ãberschrift 1.2.1'.encode(u'utf-8'))226		self.assertEqual(vim.current.window.cursor, (13, 1))227	def test_demote_newly_created_level_one_heading(self):228		vim.current.window.cursor = (2, 0)229		self.assertNotEqual(self.editstructure.new_heading(below=True), None)230		self.assertEqual(vim.current.buffer[1], u'* Ãberschrift 1'.encode(u'utf-8'))231		self.assertEqual(vim.current.buffer[5], u'* '.encode(u'utf-8'))232		self.assertEqual(vim.current.buffer[6], u'** Ãberschrift 1.1'.encode(u'utf-8'))233		self.assertEqual(vim.current.buffer[10], u'** Ãberschrift 1.2'.encode(u'utf-8'))234		self.assertEqual(vim.current.buffer[13], u'**** Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))235		self.assertEqual(vim.current.buffer[16], u'*** Ãberschrift 1.2.1'.encode(u'utf-8'))236		self.assertEqual(vim.current.buffer[17], u'* Ãberschrift 2'.encode(u'utf-8'))237		vim.current.window.cursor = (6, 2)238		self.assertNotEqual(self.editstructure.demote_heading(), None)239		self.assertEqual(vim.CMDHISTORY[-1], u'normal 6ggV17gg='.encode(u'utf-8'))240		self.assertEqual(vim.current.buffer[5], u'** '.encode(u'utf-8'))241		self.assertEqual(vim.current.buffer[6], u'*** Ãberschrift 1.1'.encode(u'utf-8'))242		self.assertEqual(vim.current.buffer[10], u'*** Ãberschrift 1.2'.encode(u'utf-8'))243		self.assertEqual(vim.current.buffer[13], u'***** Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))244		self.assertEqual(vim.current.buffer[16], u'**** Ãberschrift 1.2.1'.encode(u'utf-8'))245		self.assertEqual(vim.current.buffer[17], u'* Ãberschrift 2'.encode(u'utf-8'))246	def test_demote_newly_created_level_two_heading(self):247		vim.current.window.cursor = (10, 0)248		self.assertNotEqual(self.editstructure.new_heading(below=True), None)249		self.assertEqual(vim.current.buffer[1], u'* Ãberschrift 1'.encode(u'utf-8'))250		self.assertEqual(vim.current.buffer[5], u'** Ãberschrift 1.1'.encode(u'utf-8'))251		self.assertEqual(vim.current.buffer[9], u'** Ãberschrift 1.2'.encode(u'utf-8'))252		self.assertEqual(vim.current.buffer[12], u'** '.encode(u'utf-8'))253		self.assertEqual(vim.current.buffer[13], u'**** Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))254		self.assertEqual(vim.current.buffer[16], u'*** Ãberschrift 1.2.1'.encode(u'utf-8'))255		self.assertEqual(vim.current.buffer[17], u'* Ãberschrift 2'.encode(u'utf-8'))256		vim.current.window.cursor = (13, 3)257		self.assertNotEqual(self.editstructure.demote_heading(including_children=False, on_heading=True), None)258		self.assertEqual(vim.CMDHISTORY[-1], u'exe "normal 13gg"|startinsert!'.encode(u'utf-8'))259		self.assertEqual(vim.current.buffer[1], u'* Ãberschrift 1'.encode(u'utf-8'))260		self.assertEqual(vim.current.buffer[5], u'** Ãberschrift 1.1'.encode(u'utf-8'))261		self.assertEqual(vim.current.buffer[9], u'** Ãberschrift 1.2'.encode(u'utf-8'))262		self.assertEqual(vim.current.buffer[12], u'*** '.encode(u'utf-8'))263		self.assertEqual(vim.current.buffer[13], u'**** Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))264		self.assertEqual(vim.current.buffer[16], u'*** Ãberschrift 1.2.1'.encode(u'utf-8'))265		self.assertEqual(vim.current.buffer[17], u'* Ãberschrift 2'.encode(u'utf-8'))266	def test_demote_last_heading(self):267		vim.current.buffer[:] = [ i.encode(u'utf-8') for i in u"""268* Ãberschrift 2269* Ãberschrift 3""".split('\n')]270		vim.current.window.cursor = (3, 0)271		h = ORGMODE.get_document().current_heading()272		self.assertNotEqual(self.editstructure.demote_heading(), None)273		self.assertEqual(h.end, 2)274		self.assertFalse(vim.CMDHISTORY)275		self.assertEqual(vim.current.buffer[2], u'** Ãberschrift 3'.encode(u'utf-8'))276		self.assertEqual(vim.current.window.cursor, (3, 1))277	def test_promote_heading(self):278		vim.current.window.cursor = (13, 0)279		self.assertNotEqual(self.editstructure.promote_heading(), None)280		self.assertEqual(vim.CMDHISTORY[-1], u'normal 13ggV15gg='.encode(u'utf-8'))281		self.assertEqual(vim.current.buffer[10], u'Text 3'.encode(u'utf-8'))282		self.assertEqual(vim.current.buffer[11], u''.encode(u'utf-8'))283		self.assertEqual(vim.current.buffer[12], u'*** Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))284		self.assertEqual(vim.current.buffer[13], u''.encode(u'utf-8'))285		# actually the indentation comes through vim, just the heading is updated286		self.assertEqual(vim.current.buffer[14], u'Bla Bla bla bla'.encode(u'utf-8'))287		self.assertEqual(vim.current.buffer[15], u'*** Ãberschrift 1.2.1'.encode(u'utf-8'))288		self.assertEqual(vim.current.window.cursor, (13, -1))289	def test_promote_level_one_heading(self):290		vim.current.window.cursor = (2, 0)291		self.assertEqual(self.editstructure.promote_heading(), None)292		self.assertEqual(len(vim.CMDHISTORY), 0)293		self.assertEqual(vim.current.buffer[1], u'* Ãberschrift 1'.encode(u'utf-8'))294		self.assertEqual(vim.current.window.cursor, (2, 0))295	def test_demote_parent_heading(self):296		vim.current.window.cursor = (2, 0)297		self.assertNotEqual(self.editstructure.demote_heading(), None)298		self.assertEqual(vim.CMDHISTORY[-1], u'normal 2ggV16gg='.encode(u'utf-8'))299		self.assertEqual(vim.current.buffer[1], u'** Ãberschrift 1'.encode(u'utf-8'))300		self.assertEqual(vim.current.buffer[5], u'*** Ãberschrift 1.1'.encode(u'utf-8'))301		self.assertEqual(vim.current.buffer[9], u'*** Ãberschrift 1.2'.encode(u'utf-8'))302		self.assertEqual(vim.current.buffer[12], u'***** Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))303		self.assertEqual(vim.current.buffer[15], u'**** Ãberschrift 1.2.1'.encode(u'utf-8'))304		self.assertEqual(vim.current.buffer[16], u'* Ãberschrift 2'.encode(u'utf-8'))305		self.assertEqual(vim.current.window.cursor, (2, 1))306	def test_promote_parent_heading(self):307		vim.current.window.cursor = (10, 0)308		self.assertNotEqual(self.editstructure.promote_heading(), None)309		self.assertEqual(vim.CMDHISTORY[-1], u'normal 10ggV16gg='.encode(u'utf-8'))310		self.assertEqual(vim.current.buffer[5], u'** Ãberschrift 1.1'.encode(u'utf-8'))311		self.assertEqual(vim.current.buffer[9], u'* Ãberschrift 1.2'.encode(u'utf-8'))312		self.assertEqual(vim.current.buffer[12], u'*** Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))313		self.assertEqual(vim.current.buffer[15], u'** Ãberschrift 1.2.1'.encode(u'utf-8'))314		self.assertEqual(vim.current.buffer[16], u'* Ãberschrift 2'.encode(u'utf-8'))315		self.assertEqual(vim.current.window.cursor, (10, -1))316	# run tests with count317	def test_demote_parent_heading_count(self):318		vim.current.window.cursor = (2, 0)319		vim.EVALRESULTS[u"v:count"] = u'3'.encode(u'utf-8')320		self.assertNotEqual(self.editstructure.demote_heading(), None)321		self.assertEqual(len(vim.CMDHISTORY), 3)322		self.assertEqual(vim.CMDHISTORY[-3], u'normal 2ggV16gg='.encode(u'utf-8'))323		self.assertEqual(vim.CMDHISTORY[-2], u'normal 2ggV16gg='.encode(u'utf-8'))324		self.assertEqual(vim.CMDHISTORY[-1], u'normal 2ggV16gg='.encode(u'utf-8'))325		self.assertEqual(vim.current.buffer[1], u'**** Ãberschrift 1'.encode(u'utf-8'))326		self.assertEqual(vim.current.buffer[5], u'***** Ãberschrift 1.1'.encode(u'utf-8'))327		self.assertEqual(vim.current.buffer[9], u'***** Ãberschrift 1.2'.encode(u'utf-8'))328		self.assertEqual(vim.current.buffer[12], u'******* Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))329		self.assertEqual(vim.current.buffer[15], u'****** Ãberschrift 1.2.1'.encode(u'utf-8'))330		self.assertEqual(vim.current.buffer[16], u'* Ãberschrift 2'.encode(u'utf-8'))331		self.assertEqual(vim.current.buffer[16], u'* Ãberschrift 2'.encode(u'utf-8'))332		self.assertEqual(vim.current.window.cursor, (2, 3))333	def test_promote_parent_heading(self):334		vim.current.window.cursor = (13, 0)335		vim.EVALRESULTS[u"v:count"] = u'3'.encode(u'utf-8')336		self.assertNotEqual(self.editstructure.promote_heading(), None)337		self.assertEqual(len(vim.CMDHISTORY), 3)338		self.assertEqual(vim.CMDHISTORY[-3], u'normal 13ggV15gg='.encode(u'utf-8'))339		self.assertEqual(vim.CMDHISTORY[-2], u'normal 13ggV15gg='.encode(u'utf-8'))340		self.assertEqual(vim.CMDHISTORY[-1], u'normal 13ggV16gg='.encode(u'utf-8'))341		self.assertEqual(vim.current.buffer[5], u'** Ãberschrift 1.1'.encode(u'utf-8'))342		self.assertEqual(vim.current.buffer[9], u'** Ãberschrift 1.2'.encode(u'utf-8'))343		self.assertEqual(vim.current.buffer[12], u'* Ãberschrift 1.2.1.falsch'.encode(u'utf-8'))344		self.assertEqual(vim.current.buffer[15], u'** Ãberschrift 1.2.1'.encode(u'utf-8'))345		self.assertEqual(vim.current.buffer[16], u'* Ãberschrift 2'.encode(u'utf-8'))346		self.assertEqual(vim.current.window.cursor, (13, -3))347def suite():...fuzz.py
Source:fuzz.py  
1# Fuzzing functions for qcow2 fields2#3# Copyright (C) 2014 Maria Kustova <maria.k@catit.be>4#5# This program is free software: you can redistribute it and/or modify6# it under the terms of the GNU General Public License as published by7# the Free Software Foundation, either version 2 of the License, or8# (at your option) any later version.9#10# This program is distributed in the hope that it will be useful,11# but WITHOUT ANY WARRANTY; without even the implied warranty of12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the13# GNU General Public License for more details.14#15# You should have received a copy of the GNU General Public License16# along with this program.  If not, see <http://www.gnu.org/licenses/>.17#18import random19from functools import reduce20UINT8 = 0xff21UINT16 = 0xffff22UINT32 = 0xffffffff23UINT64 = 0xffffffffffffffff24# Most significant bit orders25UINT32_M = 3126UINT64_M = 6327# Fuzz vectors28UINT8_V = [0, 0x10, UINT8//4, UINT8//2 - 1, UINT8//2, UINT8//2 + 1, UINT8 - 1,29           UINT8]30UINT16_V = [0, 0x100, 0x1000, UINT16//4, UINT16//2 - 1, UINT16//2, UINT16//2 + 1,31            UINT16 - 1, UINT16]32UINT32_V = [0, 0x100, 0x1000, 0x10000, 0x100000, UINT32//4, UINT32//2 - 1,33            UINT32//2, UINT32//2 + 1, UINT32 - 1, UINT32]34UINT64_V = UINT32_V + [0x1000000, 0x10000000, 0x100000000, UINT64//4,35                       UINT64//2 - 1, UINT64//2, UINT64//2 + 1, UINT64 - 1,36                       UINT64]37BYTES_V = [b'%s%p%x%d', b'.1024d', b'%.2049d', b'%p%p%p%p', b'%x%x%x%x',38           b'%d%d%d%d', b'%s%s%s%s', b'%99999999999s', b'%08x', b'%%20d', b'%%20n',39           b'%%20x', b'%%20s', b'%s%s%s%s%s%s%s%s%s%s', b'%p%p%p%p%p%p%p%p%p%p',40           b'%#0123456x%08x%x%s%p%d%n%o%u%c%h%l%q%j%z%Z%t%i%e%g%f%a%C%S%08x%%',41           b'%s x 129', b'%x x 257']42def random_from_intervals(intervals):43    """Select a random integer number from the list of specified intervals.44    Each interval is a tuple of lower and upper limits of the interval. The45    limits are included. Intervals in a list should not overlap.46    """47    total = reduce(lambda x, y: x + y[1] - y[0] + 1, intervals, 0)48    r = random.randint(0, total - 1) + intervals[0][0]49    for x in zip(intervals, intervals[1:]):50        r = r + (r > x[0][1]) * (x[1][0] - x[0][1] - 1)51    return r52def random_bits(bit_ranges):53    """Generate random binary mask with ones in the specified bit ranges.54    Each bit_ranges is a list of tuples of lower and upper limits of bit55    positions will be fuzzed. The limits are included. Random amount of bits56    in range limits will be set to ones. The mask is returned in decimal57    integer format.58    """59    bit_numbers = []60    # Select random amount of random positions in bit_ranges61    for rng in bit_ranges:62        bit_numbers += random.sample(range(rng[0], rng[1] + 1),63                                     random.randint(0, rng[1] - rng[0] + 1))64    val = 065    # Set bits on selected positions to ones66    for bit in bit_numbers:67        val |= 1 << bit68    return val69def truncate_bytes(sequences, length):70    """Return sequences truncated to specified length."""71    if type(sequences) == list:72        return [s[:length] for s in sequences]73    else:74        return sequences[:length]75def validator(current, pick, choices):76    """Return a value not equal to the current selected by the pick77    function from choices.78    """79    while True:80        val = pick(choices)81        if not val == current:82            return val83def int_validator(current, intervals):84    """Return a random value from intervals not equal to the current.85    This function is useful for selection from valid values except current one.86    """87    return validator(current, random_from_intervals, intervals)88def bit_validator(current, bit_ranges):89    """Return a random bit mask not equal to the current.90    This function is useful for selection from valid values except current one.91    """92    return validator(current, random_bits, bit_ranges)93def bytes_validator(current, sequences):94    """Return a random bytes value from the list not equal to the current.95    This function is useful for selection from valid values except current one.96    """97    return validator(current, random.choice, sequences)98def selector(current, constraints, validate=int_validator):99    """Select one value from all defined by constraints.100    Each constraint produces one random value satisfying to it. The function101    randomly selects one value satisfying at least one constraint (depending on102    constraints overlaps).103    """104    def iter_validate(c):105        """Apply validate() only to constraints represented as lists.106        This auxiliary function replaces short circuit conditions not supported107        in Python 2.4108        """109        if type(c) == list:110            return validate(current, c)111        else:112            return c113    fuzz_values = [iter_validate(c) for c in constraints]114    # Remove current for cases it's implicitly specified in constraints115    # Duplicate validator functionality to prevent decreasing of probability116    # to get one of allowable values117    # TODO: remove validators after implementation of intelligent selection118    # of fields will be fuzzed119    try:120        fuzz_values.remove(current)121    except ValueError:122        pass123    return random.choice(fuzz_values)124def magic(current):125    """Fuzz magic header field.126    The function just returns the current magic value and provides uniformity127    of calls for all fuzzing functions.128    """129    return current130def version(current):131    """Fuzz version header field."""132    constraints = UINT32_V + [133        [(2, 3)],  # correct values134        [(0, 1), (4, UINT32)]135    ]136    return selector(current, constraints)137def backing_file_offset(current):138    """Fuzz backing file offset header field."""139    constraints = UINT64_V140    return selector(current, constraints)141def backing_file_size(current):142    """Fuzz backing file size header field."""143    constraints = UINT32_V144    return selector(current, constraints)145def cluster_bits(current):146    """Fuzz cluster bits header field."""147    constraints = UINT32_V + [148        [(9, 20)],  # correct values149        [(0, 9), (20, UINT32)]150    ]151    return selector(current, constraints)152def size(current):153    """Fuzz image size header field."""154    constraints = UINT64_V155    return selector(current, constraints)156def crypt_method(current):157    """Fuzz crypt method header field."""158    constraints = UINT32_V + [159        1,160        [(2, UINT32)]161    ]162    return selector(current, constraints)163def l1_size(current):164    """Fuzz L1 table size header field."""165    constraints = UINT32_V166    return selector(current, constraints)167def l1_table_offset(current):168    """Fuzz L1 table offset header field."""169    constraints = UINT64_V170    return selector(current, constraints)171def refcount_table_offset(current):172    """Fuzz refcount table offset header field."""173    constraints = UINT64_V174    return selector(current, constraints)175def refcount_table_clusters(current):176    """Fuzz refcount table clusters header field."""177    constraints = UINT32_V178    return selector(current, constraints)179def nb_snapshots(current):180    """Fuzz number of snapshots header field."""181    constraints = UINT32_V182    return selector(current, constraints)183def snapshots_offset(current):184    """Fuzz snapshots offset header field."""185    constraints = UINT64_V186    return selector(current, constraints)187def incompatible_features(current):188    """Fuzz incompatible features header field."""189    constraints = [190        [(0, 1)],  # allowable values191        [(0, UINT64_M)]192    ]193    return selector(current, constraints, bit_validator)194def compatible_features(current):195    """Fuzz compatible features header field."""196    constraints = [197        [(0, UINT64_M)]198    ]199    return selector(current, constraints, bit_validator)200def autoclear_features(current):201    """Fuzz autoclear features header field."""202    constraints = [203        [(0, UINT64_M)]204    ]205    return selector(current, constraints, bit_validator)206def refcount_order(current):207    """Fuzz number of refcount order header field."""208    constraints = UINT32_V209    return selector(current, constraints)210def header_length(current):211    """Fuzz number of refcount order header field."""212    constraints = UINT32_V + [213        72,214        104,215        [(0, UINT32)]216    ]217    return selector(current, constraints)218def bf_name(current):219    """Fuzz the backing file name."""220    constraints = [221        truncate_bytes(BYTES_V, len(current))222    ]223    return selector(current, constraints, bytes_validator)224def ext_magic(current):225    """Fuzz magic field of a header extension."""226    constraints = UINT32_V227    return selector(current, constraints)228def ext_length(current):229    """Fuzz length field of a header extension."""230    constraints = UINT32_V231    return selector(current, constraints)232def bf_format(current):233    """Fuzz backing file format in the corresponding header extension."""234    constraints = [235        truncate_bytes(BYTES_V, len(current)),236        truncate_bytes(BYTES_V, (len(current) + 7) & ~7)  # Fuzz padding237    ]238    return selector(current, constraints, bytes_validator)239def feature_type(current):240    """Fuzz feature type field of a feature name table header extension."""241    constraints = UINT8_V242    return selector(current, constraints)243def feature_bit_number(current):244    """Fuzz bit number field of a feature name table header extension."""245    constraints = UINT8_V246    return selector(current, constraints)247def feature_name(current):248    """Fuzz feature name field of a feature name table header extension."""249    constraints = [250        truncate_bytes(BYTES_V, len(current)),251        truncate_bytes(BYTES_V, 46)  # Fuzz padding (field length = 46)252    ]253    return selector(current, constraints, bytes_validator)254def l1_entry(current):255    """Fuzz an entry of the L1 table."""256    constraints = UINT64_V257    # Reserved bits are ignored258    # Added a possibility when only flags are fuzzed259    offset = 0x7fffffffffffffff & \260             random.choice([selector(current, constraints), current])261    is_cow = random.randint(0, 1)262    return offset + (is_cow << UINT64_M)263def l2_entry(current):264    """Fuzz an entry of an L2 table."""265    constraints = UINT64_V266    # Reserved bits are ignored267    # Add a possibility when only flags are fuzzed268    offset = 0x3ffffffffffffffe & \269             random.choice([selector(current, constraints), current])270    is_compressed = random.randint(0, 1)271    is_cow = random.randint(0, 1)272    is_zero = random.randint(0, 1)273    value = offset + (is_cow << UINT64_M) + \274            (is_compressed << UINT64_M - 1) + is_zero275    return value276def refcount_table_entry(current):277    """Fuzz an entry of the refcount table."""278    constraints = UINT64_V279    return selector(current, constraints)280def refcount_block_entry(current):281    """Fuzz an entry of a refcount block."""282    constraints = UINT16_V...userActions.ts
Source:userActions.ts  
1import { Socket } from "socket.io";2import { Room, User } from "../../../db/schema";3import roundHandler from "./round";4// import { STARTING_BALANCE } from "../../../constants/intialGameValues";5var turnCount = 1;6const userActionsHandler = async (socket: Socket) => {7  try {8    //Fold9    socket.on("fold", async ({roomId, id}) => {10        if (!roomId) return;11        var room = await Room.findById(roomId);12        if (!room) return;13        console.log(`User ${id} folded`)14        let currentPlayers = room.players.filter(player=>player.current_action !== "fold");15        for (let i = 0; i<currentPlayers.length;i++){16            if(currentPlayers[i]?.userId.toString()===id) {17                currentPlayers[i]!.turn = false;18                currentPlayers[i]!.current_action = "fold"19                currentPlayers[(i+1)%currentPlayers.length]!.turn = true;20                break;21            }22        }23        room.players.map(player => {24            let plyr = currentPlayers.find(p=>p.userId.toString() === player.userId.toString())25            if (plyr){26                return plyr27            } else {28                return player29            }30        })31        room.markModified("players");32        33        if (turnCount >= currentPlayers.length) {34            turnCount = 1;35            room.rndCnt++36            await room.save();37            roundHandler(socket,roomId)38        } else {39            turnCount++;40        } 41        await room.save();42        43        socket.emit("player_action");44        socket.in(`Room_${roomId}`).emit("player_action")45    });46    //check47    socket.on("check", async ({roomId,id}) => {48        if (!roomId) return;49        var room = await Room.findById(roomId);50        if (!room) return;51        console.log(`User ${id} checked`)52        let currentPlayers = room.players.filter(player=>player.current_action !== "fold");53        for (let i = 0; i<currentPlayers.length;i++){54            if(currentPlayers[i]?.userId.toString()===id) {55                currentPlayers[i]!.turn = false;56                currentPlayers[i]!.current_action = "check"57                currentPlayers[(i+1)%currentPlayers.length]!.turn = true;58                break;59            }60        }61        room.players.map(player => {62            let plyr = currentPlayers.find(p=>p.userId.toString() === player.userId.toString())63            if (plyr){64                return plyr65            } else {66                return player67            }68        })69        room.markModified("players");70        71        if (turnCount >= currentPlayers.length) {72            turnCount = 1;73            room.rndCnt++74            await room.save();75            roundHandler(socket,roomId)76        } else {77            turnCount++;78        }79        await room.save();80        socket.emit("player_action");81        socket.in(`Room_${roomId}`).emit("player_action")82    });83    //call84    socket.on("call", async ({roomId, id}) => {85        if (!roomId) return;86        var room = await Room.findById(roomId);87        if (!room) return;88        var user = await User.findById(id);89        if (!user) return;90        console.log(`User ${id} called`)91        let currentPlayers = room.players.filter(player=>player.current_action !== "fold");92        for (let i = 0; i<currentPlayers.length;i++){93            if(currentPlayers[i]?.userId.toString()===id) {94                currentPlayers[i]!.turn = false;95                currentPlayers[i]!.current_action = "call"96                if (!currentPlayers[i]!.currentBet) currentPlayers[i]!.currentBet = 0;97                if (currentPlayers[i]!.currentBet! > currentPlayers[i]!.currentBalance) {98                    user.balance -= currentPlayers[i]!.currentBalance;99                    room.pot += currentPlayers[i]!.currentBalance;100                    currentPlayers[i]!.currentBet =currentPlayers[i]!.currentBalance;101                    currentPlayers[i]!.currentBalance = 0;102                } else {103                    currentPlayers[i]!.currentBalance -= (room.currentRoundBet - currentPlayers[i]!.currentBet!);104                    user.balance -= (room.currentRoundBet - currentPlayers[i]!.currentBet!)105                    room.pot += (room.currentRoundBet - currentPlayers[i]!.currentBet!);106                    currentPlayers[i]!.currentBet = room.currentRoundBet;107                }108                currentPlayers[(i+1)%currentPlayers.length]!.turn = true;109                break;110            }111        }112        room.players.map(player => {113            let plyr = currentPlayers.find(p=>p.userId.toString() === player.userId.toString())114            if (plyr){115                return plyr116            } else {117                return player118            }119        })120        room.markModified("players");121        122        123        if (turnCount >= currentPlayers.length) {124            turnCount = 1;125            room.rndCnt++126            await room.save();127            roundHandler(socket,roomId)128        } else {129            turnCount++;130        }131        await user.save();132        await room.save();133        socket.emit("player_action");134        socket.in(`Room_${roomId}`).emit("player_action")135    });136    //bet/rise137    socket.on("bet/rise", async ({roomId,id,value}) => {138        if (!roomId) return;139        var room = await Room.findById(roomId);140        if (!room) return;141        var user = await User.findById(id);142        if (!user) return;143        console.log(`User ${id} rised/bet ${value}`)144        let currentPlayers = room.players.filter(player=>player.current_action !== "fold");145        for (let i = 0; i<currentPlayers.length;i++){146            if(currentPlayers[i]?.userId.toString()===id) {147                if (value > currentPlayers[i]!.currentBalance) value = currentPlayers[i]!.currentBalance;148                currentPlayers[i]!.turn = false;149                currentPlayers[i]!.current_action = "bet/rise";150                if (!currentPlayers[i]!.currentBet) currentPlayers[i]!.currentBet = 0;151                room.currentRoundBet = value;152                currentPlayers[i]!.currentBalance -= (value - currentPlayers[i]!.currentBet!);153                user.balance -= (value - currentPlayers[i]!.currentBet!);154                room.pot += (room.currentRoundBet - currentPlayers[i]!.currentBet!);155                currentPlayers[i]!.currentBet = room.currentRoundBet;156                currentPlayers[(i+1)%currentPlayers.length]!.turn = true;157                break;158            }159        }160        room.players.map(player => {161            let plyr = currentPlayers.find(p=>p.userId.toString() === player.userId.toString())162            if (plyr){163                return plyr164            } else {165                return player166            }167        })168        room.markModified("players");169        await user.save();170        await room.save();171        //start betting Round172        turnCount = 2;173        socket.emit("player_action");174        socket.in(`Room_${roomId}`).emit("player_action")175    });176  } catch (err) {177      console.log(err)178  }179};...CurrentController.ts
Source:CurrentController.ts  
1import { NextFunction, Request, Response } from "express";2import { prismaClient } from "../prisma/prismaClient";3import { CurrentService } from "../services/CurrentService";4class CurrentController {5  async getCurrentStatus(6    request: Request,7    response: Response,8    next: NextFunction9  ) {10    try {11      if (!request.user_id)12        return response.status(401).json({ message: "Unauthorized" });13      const service = new CurrentService();14      const currentStatus = await service.getCurrentStatus(request.user_id);15      return response.json(currentStatus);16    } catch (err) {17      next(err);18    }19  }20  async startCurrent(request: Request, response: Response, next: NextFunction) {21    try {22      if (!request.user_id)23        return response.status(401).json({ message: "Unauthorized" });24      const service = new CurrentService();25      let currentStatus = await service.getCurrentStatus(request.user_id);26      if (!currentStatus.hasAvailableCurrent)27        return response.json(currentStatus);28      const canCreateCurrent = await service.startNewCurrent(request.user_id);29      if (!canCreateCurrent)30        return response.status(404).json({ message: "Training unavailables" });31      currentStatus = await service.getCurrentStatus(request.user_id);32      return response.json(currentStatus);33    } catch (err) {34      next(err);35    }36  }37  async stopCurrent(request: Request, response: Response, next: NextFunction) {38    try {39      if (!request.user_id)40        return response.status(401).json({ message: "Unauthorized" });41      const service = new CurrentService();42      let currentStatus = await service.getCurrentStatus(request.user_id);43      if (!currentStatus.activeCurrent) return response.json(currentStatus);44      await service.stopActiveCurrents(request.user_id);45      currentStatus = await service.getCurrentStatus(request.user_id);46      return response.json(currentStatus);47    } catch (err) {48      next(err);49    }50  }51  async completeCurrentExercise(52    request: Request,53    response: Response,54    next: NextFunction55  ) {56    try {57      const { exercise_id } = request.params;58      if (!request.user_id)59        return response.status(401).json({ message: "Unauthorized" });60      const service = new CurrentService();61      let currentStatus = await service.getCurrentStatus(request.user_id);62      if (!currentStatus.activeCurrent) return response.json(currentStatus);63      if (64        !currentStatus.activeCurrent.currentExercises.some(65          (item) => item.id === exercise_id66        )67      )68        return response.status(409).send("Unavailable to manage this exercise");69      await service.manageCurrentExercise(70        request.user_id,71        exercise_id,72        "concluded"73      );74      currentStatus = await service.getCurrentStatus(request.user_id);75      return response.json(currentStatus);76    } catch (err) {77      next(err);78    }79  }80  async skipCurrentExercise(81    request: Request,82    response: Response,83    next: NextFunction84  ) {85    try {86      const { exercise_id } = request.params;87      if (!request.user_id)88        return response.status(401).json({ message: "Unauthorized" });89      const service = new CurrentService();90      let currentStatus = await service.getCurrentStatus(request.user_id);91      if (!currentStatus.activeCurrent) return response.json(currentStatus);92      if (93        !currentStatus.activeCurrent.currentExercises.some(94          (item) => item.id === exercise_id95        )96      )97        return response.status(409).send("Unavailable to manage this exercise");98      await service.manageCurrentExercise(99        request.user_id,100        exercise_id,101        "skiped"102      );103      currentStatus = await service.getCurrentStatus(request.user_id);104      return response.json(currentStatus);105    } catch (err) {106      next(err);107    }108  }109  async restoreCurrentExercise(110    request: Request,111    response: Response,112    next: NextFunction113  ) {114    try {115      const { exercise_id } = request.params;116      if (!request.user_id)117        return response.status(401).json({ message: "Unauthorized" });118      const service = new CurrentService();119      let currentStatus = await service.getCurrentStatus(request.user_id);120      if (!currentStatus.activeCurrent) return response.json(currentStatus);121      if (122        !currentStatus.activeCurrent.currentExercises.some(123          (item) => item.id === exercise_id124        )125      )126        return response.status(409).send("Unavailable to manage this exercise");127      await service.manageCurrentExercise(128        request.user_id,129        exercise_id,130        "reseted"131      );132      currentStatus = await service.getCurrentStatus(request.user_id);133      return response.json(currentStatus);134    } catch (err) {135      next(err);136    }137  }138}...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
