return function()local A=script.Parent local C=A.Parent local b=require(A.support)local V=require(C)local e,E=V.isMatch,V.makeRe describe("\115\108\097\115\104 \104\097\110\100\108\105\110\103 - \119\105\110\100\111\119\115",function()beforeEach(function()return b.windowsPathSep()end)afterEach(function()return b.resetPathSep()end)beforeAll(function()return b.resetPathSep()end)afterAll(function()return b.resetPathSep()end)it("\115\104\111\117\108\100 \109\097\116\099\104 \097\098\115\111\108\117\116\101 \119\105\110\100\111\119\115 \112\097\116\104\115 \119\105\116\104 \114\101\103\101\120 \102\114\111\109 \109\097\107\101\082\101",function()local A=E("\042\042\047\112\097\116\104\047\042\042",{windows=true})assert(A:test("\067\058\092\085\115\101\114\115\092\117\115\101\114\092\080\114\111\106\101\099\116\115\092\112\114\111\106\101\099\116\092\112\097\116\104\092\105\109\097\103\101\046\106\112\103"))end)itFIXME("\115\104\111\117\108\100 \109\097\116\099\104 \119\105\110\100\111\119\115 \112\097\116\104 \115\101\112\097\114\097\116\111\114\115 \119\105\116\104 \097 \115\116\114\105\110\103 \108\105\116\101\114\097\108",function()assert(not e("\097\092\097","\040\097\047\098\041"))assert(e("\097\092\098","\040\097\047\098\041"))assert(not e("\097\092\099","\040\097\047\098\041"))assert(not e("\098\092\097","\040\097\047\098\041"))assert(not e("\098\092\098","\040\097\047\098\041"))assert(not e("\098\092\099","\040\097\047\098\041"))assert(not e("\097\092\097","\097\047\098"))assert(e("\097\092\098","\097\047\098"))assert(not e("\097\092\099","\097\047\098"))assert(not e("\098\092\097","\097\047\098"))assert(not e("\098\092\098","\097\047\098"))assert(not e("\098\092\099","\097\047\098"))end)itFIXME("\115\104\111\117\108\100 \110\111\116 \109\097\116\099\104 \108\105\116\101\114\097\108 \098\097\099\107\115\108\097\115\104\101\115 \119\105\116\104 \108\105\116\101\114\097\108 \102\111\114\119\097\114\100 \115\108\097\115\104\101\115 \119\104\101\110 \119\105\110\100\111\119\115 \105\115 \100\105\115\097\098\108\101\100",function()assert(not e("\097\092\097","\097\092\098",{windows=false}))assert(e("\097\092\098","\097\092\098",{windows=false}))assert(not e("\097\092\099","\097\092\098",{windows=false}))assert(not e("\098\092\097","\097\092\098",{windows=false}))assert(not e("\098\092\098","\097\092\098",{windows=false}))assert(not e("\098\092\099","\097\092\098",{windows=false}))assert(not e("\097\092\097","\097\047\098",{windows=false}))assert(not e("\097\092\098","\097\047\098",{windows=false}))assert(not e("\097\092\099","\097\047\098",{windows=false}))assert(not e("\098\092\097","\097\047\098",{windows=false}))assert(not e("\098\092\098","\097\047\098",{windows=false}))assert(not e("\098\092\099","\097\047\098",{windows=false}))end)itFIXME("\115\104\111\117\108\100 \109\097\116\099\104 \097\110 \097\114\114\097\121 \111\102 \108\105\116\101\114\097\108 \115\116\114\105\110\103\115",function()assert(not e("\097\092\097","\040\097\047\098\041"))assert(e("\097\092\098","\040\097\047\098\041"))assert(not e("\097\092\099","\040\097\047\098\041"))assert(not e("\098\092\097","\040\097\047\098\041"))assert(not e("\098\092\098","\040\097\047\098\041"))assert(not e("\098\092\099","\040\097\047\098\041"))end)itFIXME("\115\104\111\117\108\100 \110\111\116 \109\097\116\099\104 \098\097\099\107\115\108\097\115\104\101\115 \119\105\116\104 \102\111\114\119\097\114\100 \115\108\097\115\104\101\115 \119\104\101\110 \119\105\110\100\111\119\115 \105\115 \100\105\115\097\098\108\101\100",function()assert(not e("\097\092\097","\097\047\040\097\124\099\041",{windows=false}))assert(not e("\097\092\098","\097\047\040\097\124\099\041",{windows=false}))assert(not e("\097\092\099","\097\047\040\097\124\099\041",{windows=false}))assert(not e("\097\092\097","\097\047\040\097\124\098\124\099\041",{windows=false}))assert(not e("\097\092\098","\097\047\040\097\124\098\124\099\041",{windows=false}))assert(not e("\097\092\099","\097\047\040\097\124\098\124\099\041",{windows=false}))assert(not e("\097\092\097","\040\097\092\098\041",{windows=false}))assert(e("\097\092\098","\040\097\092\092\098\041",{windows=false}))assert(not e("\097\092\099","\040\097\092\098\041",{windows=false}))assert(not e("\098\092\097","\040\097\092\098\041",{windows=false}))assert(not e("\098\092\098","\040\097\092\098\041",{windows=false}))assert(not e("\098\092\099","\040\097\092\098\041",{windows=false}))assert(not e("\097\092\097","\040\097\047\098\041",{windows=false}))assert(not e("\097\092\098","\040\097\047\098\041",{windows=false}))assert(not e("\097\092\099","\040\097\047\098\041",{windows=false}))assert(not e("\098\092\097","\040\097\047\098\041",{windows=false}))assert(not e("\098\092\098","\040\097\047\098\041",{windows=false}))assert(not e("\098\092\099","\040\097\047\098\041",{windows=false}))assert(not e("\097\092\097","\097\047\099",{windows=false}))assert(not e("\097\092\098","\097\047\099",{windows=false}))assert(not e("\097\092\099","\097\047\099",{windows=false}))assert(not e("\098\092\097","\097\047\099",{windows=false}))assert(not e("\098\092\098","\097\047\099",{windows=false}))assert(not e("\098\092\099","\097\047\099",{windows=false}))end)itFIXME("\115\104\111\117\108\100 \109\097\116\099\104 \098\097\099\107\115\108\097\115\104\101\115 \119\104\101\110 \102\111\108\108\111\119\101\100 \098\121 \114\101\103\101\120 \108\111\103\105\099\097\108 \"\111\114\"",function()assert(e("\097\092\097","\097\047\040\097\124\099\041"))assert(not e("\097\092\098","\097\047\040\097\124\099\041"))assert(e("\097\092\099","\097\047\040\097\124\099\041"))assert(e("\097\092\097","\097\047\040\097\124\098\124\099\041"))assert(e("\097\092\098","\097\047\040\097\124\098\124\099\041"))assert(e("\097\092\099","\097\047\040\097\124\098\124\099\041"))end)itFIXME("\115\104\111\117\108\100 \115\117\112\112\111\114\116 \109\097\116\099\104\105\110\103 \098\097\099\107\115\108\097\115\104\101\115 \119\105\116\104 \114\101\103\101\120 \114\097\110\103\101\115",function()assert(not e("\097\092\097","\097\047\091\098-\099\093"))assert(e("\097\092\098","\097\047\091\098-\099\093"))assert(e("\097\092\099","\097\047\091\098-\099\093"))assert(not e("\097\092\120\092\121","\097\047\091\098-\099\093"))assert(not e("\097\092\120","\097\047\091\098-\099\093"))assert(e("\097\092\097","\097\047\091\097-\122\093"))assert(e("\097\092\098","\097\047\091\097-\122\093"))assert(e("\097\092\099","\097\047\091\097-\122\093"))assert(not e("\097\092\120\092\121","\097\047\091\097-\122\093"))assert(e("\097\092\120\092\121","\097\047\091\097-\122\093\047\121"))assert(e("\097\092\120","\097\047\091\097-\122\093"))assert(not e("\097\092\097","\097\047\091\098-\099\093",{windows=false}))assert(not e("\097\092\098","\097\047\091\098-\099\093",{windows=false}))assert(not e("\097\092\099","\097\047\091\098-\099\093",{windows=false}))assert(not e("\097\092\120\092\121","\097\047\091\098-\099\093",{windows=false}))assert(not e("\097\092\120","\097\047\091\098-\099\093",{windows=false}))assert(not e("\097\092\097","\097\047\091\097-\122\093",{windows=false}))assert(not e("\097\092\098","\097\047\091\097-\122\093",{windows=false}))assert(not e("\097\092\099","\097\047\091\097-\122\093",{windows=false}))assert(not e("\097\092\120\092\121","\097\047\091\097-\122\093",{windows=false}))assert(not e("\097\092\120","\097\047\091\097-\122\093",{windows=false}))end)itFIXME("\115\104\111\117\108\100 \110\111\116 \109\097\116\099\104 \115\108\097\115\104\101\115 \119\105\116\104 \115\105\110\103\108\101 \115\116\097\114\115",function()assert(e("\097","\042"))assert(e("\098","\042"))assert(not e("\097\092\097","\042"))assert(not e("\097\092\098","\042"))assert(not e("\097\092\099","\042"))assert(not e("\097\092\120","\042"))assert(not e("\097\092\097\092\097","\042"))assert(not e("\097\092\097\092\098","\042"))assert(not e("\097\092\097\092\097\092\097","\042"))assert(not e("\097\092\097\092\097\092\097\092\097","\042"))assert(not e("\120\092\121","\042"))assert(not e("\122\092\122","\042"))assert(not e("\097","\042\047\042"))assert(not e("\098","\042\047\042"))assert(e("\097\092\097","\042\047\042"))assert(e("\097\092\098","\042\047\042"))assert(e("\097\092\099","\042\047\042"))assert(e("\097\092\120","\042\047\042"))assert(not e("\097\092\097\092\097","\042\047\042"))assert(not e("\097\092\097\092\098","\042\047\042"))assert(not e("\097\092\097\092\097\092\097","\042\047\042"))assert(not e("\097\092\097\092\097\092\097\092\097","\042\047\042"))assert(e("\120\092\121","\042\047\042"))assert(e("\122\092\122","\042\047\042"))assert(not e("\097","\042\047\042\047\042"))assert(not e("\098","\042\047\042\047\042"))assert(not e("\097\092\097","\042\047\042\047\042"))assert(not e("\097\092\098","\042\047\042\047\042"))assert(not e("\097\092\099","\042\047\042\047\042"))assert(not e("\097\092\120","\042\047\042\047\042"))assert(e("\097\092\097\092\097","\042\047\042\047\042"))assert(e("\097\092\097\092\098","\042\047\042\047\042"))assert(not e("\097\092\097\092\097\092\097","\042\047\042\047\042"))assert(not e("\097\092\097\092\097\092\097\092\097","\042\047\042\047\042"))assert(not e("\120\092\121","\042\047\042\047\042"))assert(not e("\122\092\122","\042\047\042\047\042"))assert(not e("\097","\042\047\042\047\042\047\042"))assert(not e("\098","\042\047\042\047\042\047\042"))assert(not e("\097\092\097","\042\047\042\047\042\047\042"))assert(not e("\097\092\098","\042\047\042\047\042\047\042"))assert(not e("\097\092\099","\042\047\042\047\042\047\042"))assert(not e("\097\092\120","\042\047\042\047\042\047\042"))assert(not e("\097\092\097\092\097","\042\047\042\047\042\047\042"))assert(not e("\097\092\097\092\098","\042\047\042\047\042\047\042"))assert(e("\097\092\097\092\097\092\097","\042\047\042\047\042\047\042"))assert(not e("\097\092\097\092\097\092\097\092\097","\042\047\042\047\042\047\042"))assert(not e("\120\092\121","\042\047\042\047\042\047\042"))assert(not e("\122\092\122","\042\047\042\047\042\047\042"))assert(not e("\097","\042\047\042\047\042\047\042\047\042"))assert(not e("\098","\042\047\042\047\042\047\042\047\042"))assert(not e("\097\092\097","\042\047\042\047\042\047\042\047\042"))assert(not e("\097\092\098","\042\047\042\047\042\047\042\047\042"))assert(not e("\097\092\099","\042\047\042\047\042\047\042\047\042"))assert(not e("\097\092\120","\042\047\042\047\042\047\042\047\042"))assert(not e("\097\092\097\092\097","\042\047\042\047\042\047\042\047\042"))assert(not e("\097\092\097\092\098","\042\047\042\047\042\047\042\047\042"))assert(not e("\097\092\097\092\097\092\097","\042\047\042\047\042\047\042\047\042"))assert(e("\097\092\097\092\097\092\097\092\097","\042\047\042\047\042\047\042\047\042"))assert(not e("\120\092\121","\042\047\042\047\042\047\042\047\042"))assert(not e("\122\092\122","\042\047\042\047\042\047\042\047\042"))assert(not e("\097","\097\047\042"))assert(not e("\098","\097\047\042"))assert(e("\097\092\097","\097\047\042"))assert(e("\097\092\098","\097\047\042"))assert(e("\097\092\099","\097\047\042"))assert(e("\097\092\120","\097\047\042"))assert(not e("\097\092\097\092\097","\097\047\042"))assert(not e("\097\092\097\092\098","\097\047\042"))assert(not e("\097\092\097\092\097\092\097","\097\047\042"))assert(not e("\097\092\097\092\097\092\097\092\097","\097\047\042"))assert(not e("\120\092\121","\097\047\042"))assert(not e("\122\092\122","\097\047\042"))assert(not e("\097","\097\047\042\047\042"))assert(not e("\098","\097\047\042\047\042"))assert(not e("\097\092\097","\097\047\042\047\042"))assert(not e("\097\092\098","\097\047\042\047\042"))assert(not e("\097\092\099","\097\047\042\047\042"))assert(not e("\097\092\120","\097\047\042\047\042"))assert(e("\097\092\097\092\097","\097\047\042\047\042"))assert(e("\097\092\097\092\098","\097\047\042\047\042"))assert(not e("\097\092\097\092\097\092\097","\097\047\042\047\042"))assert(not e("\097\092\097\092\097\092\097\092\097","\097\047\042\047\042"))assert(not e("\120\092\121","\097\047\042\047\042"))assert(not e("\122\092\122","\097\047\042\047\042"))assert(not e("\097","\097\047\042\047\042\047\042"))assert(not e("\098","\097\047\042\047\042\047\042"))assert(not e("\097\092\097","\097\047\042\047\042\047\042"))assert(not e("\097\092\098","\097\047\042\047\042\047\042"))assert(not e("\097\092\099","\097\047\042\047\042\047\042"))assert(not e("\097\092\120","\097\047\042\047\042\047\042"))assert(not e("\097\092\097\092\097","\097\047\042\047\042\047\042"))assert(not e("\097\092\097\092\098","\097\047\042\047\042\047\042"))assert(e("\097\092\097\092\097\092\097","\097\047\042\047\042\047\042"))assert(not e("\097\092\097\092\097\092\097\092\097","\097\047\042\047\042\047\042"))assert(not e("\120\092\121","\097\047\042\047\042\047\042"))assert(not e("\122\092\122","\097\047\042\047\042\047\042"))assert(not e("\097","\097\047\042\047\042\047\042\047\042"))assert(not e("\098","\097\047\042\047\042\047\042\047\042"))assert(not e("\097\092\097","\097\047\042\047\042\047\042\047\042"))assert(not e("\097\092\098","\097\047\042\047\042\047\042\047\042"))assert(not e("\097\092\099","\097\047\042\047\042\047\042\047\042"))assert(not e("\097\092\120","\097\047\042\047\042\047\042\047\042"))assert(not e("\097\092\097\092\097","\097\047\042\047\042\047\042\047\042"))assert(not e("\097\092\097\092\098","\097\047\042\047\042\047\042\047\042"))assert(not e("\097\092\097\092\097\092\097","\097\047\042\047\042\047\042\047\042"))assert(e("\097\092\097\092\097\092\097\092\097","\097\047\042\047\042\047\042\047\042"))assert(not e("\120\092\121","\097\047\042\047\042\047\042\047\042"))assert(not e("\122\092\122","\097\047\042\047\042\047\042\047\042"))assert(not e("\097","\097\047\042\047\097"))assert(not e("\098","\097\047\042\047\097"))assert(not e("\097\092\097","\097\047\042\047\097"))assert(not e("\097\092\098","\097\047\042\047\097"))assert(not e("\097\092\099","\097\047\042\047\097"))assert(not e("\097\092\120","\097\047\042\047\097"))assert(e("\097\092\097\092\097","\097\047\042\047\097"))assert(not e("\097\092\097\092\098","\097\047\042\047\097"))assert(not e("\097\092\097\092\097\092\097","\097\047\042\047\097"))assert(not e("\097\092\097\092\097\092\097\092\097","\097\047\042\047\097"))assert(not e("\120\092\121","\097\047\042\047\097"))assert(not e("\122\092\122","\097\047\042\047\097"))assert(not e("\097","\097\047\042\047\098"))assert(not e("\098","\097\047\042\047\098"))assert(not e("\097\092\097","\097\047\042\047\098"))assert(not e("\097\092\098","\097\047\042\047\098"))assert(not e("\097\092\099","\097\047\042\047\098"))assert(not e("\097\092\120","\097\047\042\047\098"))assert(not e("\097\092\097\092\097","\097\047\042\047\098"))assert(e("\097\092\097\092\098","\097\047\042\047\098"))assert(not e("\097\092\097\092\097\092\097","\097\047\042\047\098"))assert(not e("\097\092\097\092\097\092\097\092\097","\097\047\042\047\098"))assert(not e("\120\092\121","\097\047\042\047\098"))assert(not e("\122\092\122","\097\047\042\047\098"))assert(not e("\097","\042\047\042",{windows=false}))assert(not e("\098","\042\047\042",{windows=false}))assert(not e("\097\092\097","\042\047\042",{windows=false}))assert(not e("\097\092\098","\042\047\042",{windows=false}))assert(not e("\097\092\099","\042\047\042",{windows=false}))assert(not e("\097\092\120","\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097","\042\047\042",{windows=false}))assert(not e("\097\092\097\092\098","\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097","\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097\092\097","\042\047\042",{windows=false}))assert(not e("\120\092\121","\042\047\042",{windows=false}))assert(not e("\122\092\122","\042\047\042",{windows=false}))assert(not e("\097","\042\047\042\047\042",{windows=false}))assert(not e("\098","\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097","\042\047\042\047\042",{windows=false}))assert(not e("\097\092\098","\042\047\042\047\042",{windows=false}))assert(not e("\097\092\099","\042\047\042\047\042",{windows=false}))assert(not e("\097\092\120","\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097","\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\098","\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097","\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097\092\097","\042\047\042\047\042",{windows=false}))assert(not e("\120\092\121","\042\047\042\047\042",{windows=false}))assert(not e("\122\092\122","\042\047\042\047\042",{windows=false}))assert(not e("\097","\042\047\042\047\042\047\042",{windows=false}))assert(not e("\098","\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097","\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\098","\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\099","\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\120","\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097","\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\098","\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097","\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097\092\097","\042\047\042\047\042\047\042",{windows=false}))assert(not e("\120\092\121","\042\047\042\047\042\047\042",{windows=false}))assert(not e("\122\092\122","\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097","\042\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\098","\042\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097","\042\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\098","\042\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\099","\042\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\120","\042\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097","\042\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\098","\042\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097","\042\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097\092\097","\042\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\120\092\121","\042\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\122\092\122","\042\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097","\097\047\042",{windows=false}))assert(not e("\098","\097\047\042",{windows=false}))assert(not e("\097\092\097","\097\047\042",{windows=false}))assert(not e("\097\092\098","\097\047\042",{windows=false}))assert(not e("\097\092\099","\097\047\042",{windows=false}))assert(not e("\097\092\120","\097\047\042",{windows=false}))assert(not e("\097\092\097\092\097","\097\047\042",{windows=false}))assert(not e("\097\092\097\092\098","\097\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097","\097\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097\092\097","\097\047\042",{windows=false}))assert(not e("\120\092\121","\097\047\042",{windows=false}))assert(not e("\122\092\122","\097\047\042",{windows=false}))assert(not e("\097","\097\047\042\047\042",{windows=false}))assert(not e("\098","\097\047\042\047\042",{windows=false}))assert(not e("\097\092\097","\097\047\042\047\042",{windows=false}))assert(not e("\097\092\098","\097\047\042\047\042",{windows=false}))assert(not e("\097\092\099","\097\047\042\047\042",{windows=false}))assert(not e("\097\092\120","\097\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097","\097\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\098","\097\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097","\097\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097\092\097","\097\047\042\047\042",{windows=false}))assert(not e("\120\092\121","\097\047\042\047\042",{windows=false}))assert(not e("\122\092\122","\097\047\042\047\042",{windows=false}))assert(not e("\097","\097\047\042\047\042\047\042",{windows=false}))assert(not e("\098","\097\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097","\097\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\098","\097\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\099","\097\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\120","\097\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097","\097\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\098","\097\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097","\097\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097\092\097","\097\047\042\047\042\047\042",{windows=false}))assert(not e("\120\092\121","\097\047\042\047\042\047\042",{windows=false}))assert(not e("\122\092\122","\097\047\042\047\042\047\042",{windows=false}))assert(not e("\097","\097\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\098","\097\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097","\097\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\098","\097\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\099","\097\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\120","\097\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097","\097\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\098","\097\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097","\097\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097\092\097\092\097\092\097\092\097","\097\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\120\092\121","\097\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\122\092\122","\097\047\042\047\042\047\042\047\042",{windows=false}))assert(not e("\097","\097\047\042\047\097",{windows=false}))assert(not e("\098","\097\047\042\047\097",{windows=false}))assert(not e("\097\092\097","\097\047\042\047\097",{windows=false}))assert(not e("\097\092\098","\097\047\042\047\097",{windows=false}))assert(not e("\097\092\099","\097\047\042\047\097",{windows=false}))assert(not e("\097\092\120","\097\047\042\047\097",{windows=false}))assert(not e("\097\092\097\092\097","\097\047\042\047\097",{windows=false}))assert(not e("\097\092\097\092\098","\097\047\042\047\097",{windows=false}))assert(not e("\097\092\097\092\097\092\097","\097\047\042\047\097",{windows=false}))assert(not e("\097\092\097\092\097\092\097\092\097","\097\047\042\047\097",{windows=false}))assert(not e("\120\092\121","\097\047\042\047\097",{windows=false}))assert(not e("\122\092\122","\097\047\042\047\097",{windows=false}))assert(not e("\097","\097\047\042\047\098",{windows=false}))assert(not e("\098","\097\047\042\047\098",{windows=false}))assert(not e("\097\092\097","\097\047\042\047\098",{windows=false}))assert(not e("\097\092\098","\097\047\042\047\098",{windows=false}))assert(not e("\097\092\099","\097\047\042\047\098",{windows=false}))assert(not e("\097\092\120","\097\047\042\047\098",{windows=false}))assert(not e("\097\092\097\092\097","\097\047\042\047\098",{windows=false}))assert(not e("\097\092\097\092\098","\097\047\042\047\098",{windows=false}))assert(not e("\097\092\097\092\097\092\097","\097\047\042\047\098",{windows=false}))assert(not e("\097\092\097\092\097\092\097\092\097","\097\047\042\047\098",{windows=false}))assert(not e("\120\092\121","\097\047\042\047\098",{windows=false}))assert(not e("\122\092\122","\097\047\042\047\098",{windows=false}))end)itFIXME("\115\104\111\117\108\100 \115\117\112\112\111\114\116 \103\108\111\098\115\116\097\114\115 \040\042\042\041",function()assert(e("\097\092\097","\097\047\042\042"))assert(e("\097\092\098","\097\047\042\042"))assert(e("\097\092\099","\097\047\042\042"))assert(e("\097\092\120","\097\047\042\042"))assert(e("\097\092\120\092\121","\097\047\042\042"))assert(e("\097\092\120\092\121\092\122","\097\047\042\042"))assert(e("\097\092\097","\097\047\042\042\047\042"))assert(e("\097\092\098","\097\047\042\042\047\042"))assert(e("\097\092\099","\097\047\042\042\047\042"))assert(e("\097\092\120","\097\047\042\042\047\042"))assert(e("\097\092\120\092\121","\097\047\042\042\047\042"))assert(e("\097\092\120\092\121\092\122","\097\047\042\042\047\042"))assert(e("\097\092\097","\097\047\042\042\047\042\042\047\042"))assert(e("\097\092\098","\097\047\042\042\047\042\042\047\042"))assert(e("\097\092\099","\097\047\042\042\047\042\042\047\042"))assert(e("\097\092\120","\097\047\042\042\047\042\042\047\042"))assert(e("\097\092\120\092\121","\097\047\042\042\047\042\042\047\042"))assert(e("\097\092\120\092\121\092\122","\097\047\042\042\047\042\042\047\042"))end)it("\115\104\111\117\108\100 \110\111\116 \109\097\116\099\104 \098\097\099\107\115\108\097\115\104\101\115 \119\105\116\104 \103\108\111\098\115\116\097\114\115 \119\104\101\110 \100\105\115\097\098\108\101\100",function()assert(not e("\097\092\097","\097\047\042\042",{windows=false}))assert(not e("\097\092\098","\097\047\042\042",{windows=false}))assert(not e("\097\092\099","\097\047\042\042",{windows=false}))assert(not e("\097\092\120","\097\047\042\042",{windows=false}))assert(not e("\097\092\120\092\121","\097\047\042\042",{windows=false}))assert(not e("\097\092\120\092\121\092\122","\097\047\042\042",{windows=false}))assert(not e("\097\092\097","\097\047\042\042\047\042",{windows=false}))assert(not e("\097\092\098","\097\047\042\042\047\042",{windows=false}))assert(not e("\097\092\099","\097\047\042\042\047\042",{windows=false}))assert(not e("\097\092\120","\097\047\042\042\047\042",{windows=false}))assert(not e("\097\092\120\092\121","\097\047\042\042\047\042",{windows=false}))assert(not e("\097\092\120\092\121\092\122","\097\047\042\042\047\042",{windows=false}))assert(not e("\097\092\097","\097\047\042\042\047\042\042\047\042",{windows=false}))assert(not e("\097\092\098","\097\047\042\042\047\042\042\047\042",{windows=false}))assert(not e("\097\092\099","\097\047\042\042\047\042\042\047\042",{windows=false}))assert(not e("\097\092\120","\097\047\042\042\047\042\042\047\042",{windows=false}))assert(not e("\097\092\120\092\121","\097\047\042\042\047\042\042\047\042",{windows=false}))assert(not e("\097\092\120\092\121\092\122","\097\047\042\042\047\042\042\047\042",{windows=false}))end)itFIXME("\115\104\111\117\108\100 \119\111\114\107 \119\105\116\104 \102\105\108\101 \101\120\116\101\110\115\105\111\110\115",function()assert(e("\097\046\116\120\116","\097\042\046\116\120\116"))assert(not e("\097\092\098\046\116\120\116","\097\042\046\116\120\116"))assert(not e("\097\092\120\092\121\046\116\120\116","\097\042\046\116\120\116"))assert(not e("\097\092\120\092\121\092\122","\097\042\046\116\120\116"))assert(e("\097\046\116\120\116","\097\046\116\120\116"))assert(not e("\097\092\098\046\116\120\116","\097\046\116\120\116"))assert(not e("\097\092\120\092\121\046\116\120\116","\097\046\116\120\116"))assert(not e("\097\092\120\092\121\092\122","\097\046\116\120\116"))assert(not e("\097\046\116\120\116","\097\047\042\042\047\042\046\116\120\116"))assert(e("\097\092\098\046\116\120\116","\097\047\042\042\047\042\046\116\120\116"))assert(e("\097\092\120\092\121\046\116\120\116","\097\047\042\042\047\042\046\116\120\116"))assert(not e("\097\092\120\092\121\092\122","\097\047\042\042\047\042\046\116\120\116"))assert(not e("\097\046\116\120\116","\097\047\042\042\047\042\046\116\120\116",{windows=false}))assert(not e("\097\092\098\046\116\120\116","\097\047\042\042\047\042\046\116\120\116",{windows=false}))assert(not e("\097\092\120\092\121\046\116\120\116","\097\047\042\042\047\042\046\116\120\116",{windows=false}))assert(not e("\097\092\120\092\121\092\122","\097\047\042\042\047\042\046\116\120\116",{windows=false}))assert(not e("\097\046\116\120\116","\097\047\042\046\116\120\116"))assert(e("\097\092\098\046\116\120\116","\097\047\042\046\116\120\116"))assert(not e("\097\092\120\092\121\046\116\120\116","\097\047\042\046\116\120\116"))assert(not e("\097\092\120\092\121\092\122","\097\047\042\046\116\120\116"))assert(not e("\097\046\116\120\116","\097\047\042\046\116\120\116",{windows=false}))assert(not e("\097\092\098\046\116\120\116","\097\047\042\046\116\120\116",{windows=false}))assert(not e("\097\092\120\092\121\046\116\120\116","\097\047\042\046\116\120\116",{windows=false}))assert(not e("\097\092\120\092\121\092\122","\097\047\042\046\116\120\116",{windows=false}))assert(not e("\097\046\116\120\116","\097\047\042\047\042\046\116\120\116"))assert(not e("\097\092\098\046\116\120\116","\097\047\042\047\042\046\116\120\116"))assert(e("\097\092\120\092\121\046\116\120\116","\097\047\042\047\042\046\116\120\116"))assert(not e("\097\092\120\092\121\092\122","\097\047\042\047\042\046\116\120\116"))assert(not e("\097\046\116\120\116","\097\047\042\047\042\046\116\120\116",{windows=false}))assert(not e("\097\092\098\046\116\120\116","\097\047\042\047\042\046\116\120\116",{windows=false}))assert(not e("\097\092\120\092\121\046\116\120\116","\097\047\042\047\042\046\116\120\116",{windows=false}))assert(not e("\097\092\120\092\121\092\122","\097\047\042\047\042\046\116\120\116",{windows=false}))end)itFIXME("\115\104\111\117\108\100 \115\117\112\112\111\114\116 \110\101\103\097\116\105\111\110 \112\097\116\116\101\114\110\115",function()assert(e("\097","\033\097\047\098"))assert(e("\097\092\097","\033\097\047\098"))assert(not e("\097\092\098","\033\097\047\098"))assert(e("\097\092\099","\033\097\047\098"))assert(e("\098\092\097","\033\097\047\098"))assert(e("\098\092\098","\033\097\047\098"))assert(e("\098\092\099","\033\097\047\098"))assert(e("\097","\033\042\047\099"))assert(e("\097\092\097","\033\042\047\099"))assert(e("\097\092\098","\033\042\047\099"))assert(not e("\097\092\099","\033\042\047\099"))assert(e("\098\092\097","\033\042\047\099"))assert(e("\098\092\098","\033\042\047\099"))assert(not e("\098\092\099","\033\042\047\099"))assert(e("\097","\033\097\047\098"))assert(e("\097\092\097","\033\097\047\098"))assert(not e("\097\092\098","\033\097\047\098"))assert(e("\097\092\099","\033\097\047\098"))assert(e("\098\092\097","\033\097\047\098"))assert(e("\098\092\098","\033\097\047\098"))assert(e("\098\092\099","\033\097\047\098"))assert(e("\097","\033\042\047\099"))assert(e("\097\092\097","\033\042\047\099"))assert(e("\097\092\098","\033\042\047\099"))assert(not e("\097\092\099","\033\042\047\099"))assert(e("\098\092\097","\033\042\047\099"))assert(e("\098\092\098","\033\042\047\099"))assert(not e("\098\092\099","\033\042\047\099"))assert(e("\097","\033\097\047\040\098\041"))assert(e("\097\092\097","\033\097\047\040\098\041"))assert(not e("\097\092\098","\033\097\047\040\098\041"))assert(e("\097\092\099","\033\097\047\040\098\041"))assert(e("\098\092\097","\033\097\047\040\098\041"))assert(e("\098\092\098","\033\097\047\040\098\041"))assert(e("\098\092\099","\033\097\047\040\098\041"))assert(e("\097","\033\040\097\047\098\041"))assert(e("\097\092\097","\033\040\097\047\098\041"))assert(not e("\097\092\098","\033\040\097\047\098\041"))assert(e("\097\092\099","\033\040\097\047\098\041"))assert(e("\098\092\097","\033\040\097\047\098\041"))assert(e("\098\092\098","\033\040\097\047\098\041"))assert(e("\098\092\099","\033\040\097\047\098\041"))end)end)end
-- ROBLOX upstream: https://github.com/micromatch/picomatch/tree/2.3.1/test/slashes-windows.js

return function()
	local CurrentModule = script.Parent
	local PicomatchModule = CurrentModule.Parent

	local support = require(CurrentModule.support)
	local Picomatch = require(PicomatchModule)
	local isMatch, makeRe = Picomatch.isMatch, Picomatch.makeRe
	describe("slash handling - windows", function()
		beforeEach(function()
			return support.windowsPathSep()
		end)
		afterEach(function()
			return support.resetPathSep()
		end)
		beforeAll(function()
			return support.resetPathSep()
		end)
		afterAll(function()
			return support.resetPathSep()
		end)

		it("should match absolute windows paths with regex from makeRe", function()
			local regex = makeRe("**/path/**", { windows = true })
			assert(regex:test("C:\\Users\\user\\Projects\\project\\path\\image.jpg"))
		end)

		itFIXME("should match windows path separators with a string literal", function()
			assert(not isMatch("a\\a", "(a/b)"))
			assert(isMatch("a\\b", "(a/b)"))
			assert(not isMatch("a\\c", "(a/b)"))
			assert(not isMatch("b\\a", "(a/b)"))
			assert(not isMatch("b\\b", "(a/b)"))
			assert(not isMatch("b\\c", "(a/b)"))
			assert(not isMatch("a\\a", "a/b"))
			assert(isMatch("a\\b", "a/b"))
			assert(not isMatch("a\\c", "a/b"))
			assert(not isMatch("b\\a", "a/b"))
			assert(not isMatch("b\\b", "a/b"))
			assert(not isMatch("b\\c", "a/b"))
		end)

		itFIXME("should not match literal backslashes with literal forward slashes when windows is disabled", function()
			assert(not isMatch("a\\a", "a\\b", { windows = false }))
			assert(isMatch("a\\b", "a\\b", { windows = false }))
			assert(not isMatch("a\\c", "a\\b", { windows = false }))
			assert(not isMatch("b\\a", "a\\b", { windows = false }))
			assert(not isMatch("b\\b", "a\\b", { windows = false }))
			assert(not isMatch("b\\c", "a\\b", { windows = false }))
			assert(not isMatch("a\\a", "a/b", { windows = false }))
			assert(not isMatch("a\\b", "a/b", { windows = false }))
			assert(not isMatch("a\\c", "a/b", { windows = false }))
			assert(not isMatch("b\\a", "a/b", { windows = false }))
			assert(not isMatch("b\\b", "a/b", { windows = false }))
			assert(not isMatch("b\\c", "a/b", { windows = false }))
		end)

		itFIXME("should match an array of literal strings", function()
			assert(not isMatch("a\\a", "(a/b)"))
			assert(isMatch("a\\b", "(a/b)"))
			assert(not isMatch("a\\c", "(a/b)"))
			assert(not isMatch("b\\a", "(a/b)"))
			assert(not isMatch("b\\b", "(a/b)"))
			assert(not isMatch("b\\c", "(a/b)"))
		end)

		itFIXME("should not match backslashes with forward slashes when windows is disabled", function()
			assert(not isMatch("a\\a", "a/(a|c)", { windows = false }))
			assert(not isMatch("a\\b", "a/(a|c)", { windows = false }))
			assert(not isMatch("a\\c", "a/(a|c)", { windows = false }))
			assert(not isMatch("a\\a", "a/(a|b|c)", { windows = false }))
			assert(not isMatch("a\\b", "a/(a|b|c)", { windows = false }))
			assert(not isMatch("a\\c", "a/(a|b|c)", { windows = false }))
			assert(not isMatch("a\\a", "(a\\b)", { windows = false }))
			assert(isMatch("a\\b", "(a\\\\b)", { windows = false }))
			assert(not isMatch("a\\c", "(a\\b)", { windows = false }))
			assert(not isMatch("b\\a", "(a\\b)", { windows = false }))
			assert(not isMatch("b\\b", "(a\\b)", { windows = false }))
			assert(not isMatch("b\\c", "(a\\b)", { windows = false }))
			assert(not isMatch("a\\a", "(a/b)", { windows = false }))
			assert(not isMatch("a\\b", "(a/b)", { windows = false }))
			assert(not isMatch("a\\c", "(a/b)", { windows = false }))
			assert(not isMatch("b\\a", "(a/b)", { windows = false }))
			assert(not isMatch("b\\b", "(a/b)", { windows = false }))
			assert(not isMatch("b\\c", "(a/b)", { windows = false }))
			assert(not isMatch("a\\a", "a/c", { windows = false }))
			assert(not isMatch("a\\b", "a/c", { windows = false }))
			assert(not isMatch("a\\c", "a/c", { windows = false }))
			assert(not isMatch("b\\a", "a/c", { windows = false }))
			assert(not isMatch("b\\b", "a/c", { windows = false }))
			assert(not isMatch("b\\c", "a/c", { windows = false }))
		end)

		itFIXME('should match backslashes when followed by regex logical "or"', function()
			assert(isMatch("a\\a", "a/(a|c)"))
			assert(not isMatch("a\\b", "a/(a|c)"))
			assert(isMatch("a\\c", "a/(a|c)"))
			assert(isMatch("a\\a", "a/(a|b|c)"))
			assert(isMatch("a\\b", "a/(a|b|c)"))
			assert(isMatch("a\\c", "a/(a|b|c)"))
		end)

		itFIXME("should support matching backslashes with regex ranges", function()
			assert(not isMatch("a\\a", "a/[b-c]"))
			assert(isMatch("a\\b", "a/[b-c]"))
			assert(isMatch("a\\c", "a/[b-c]"))
			assert(not isMatch("a\\x\\y", "a/[b-c]"))
			assert(not isMatch("a\\x", "a/[b-c]"))
			assert(isMatch("a\\a", "a/[a-z]"))
			assert(isMatch("a\\b", "a/[a-z]"))
			assert(isMatch("a\\c", "a/[a-z]"))
			assert(not isMatch("a\\x\\y", "a/[a-z]"))
			assert(isMatch("a\\x\\y", "a/[a-z]/y"))
			assert(isMatch("a\\x", "a/[a-z]"))
			assert(not isMatch("a\\a", "a/[b-c]", { windows = false }))
			assert(not isMatch("a\\b", "a/[b-c]", { windows = false }))
			assert(not isMatch("a\\c", "a/[b-c]", { windows = false }))
			assert(not isMatch("a\\x\\y", "a/[b-c]", { windows = false }))
			assert(not isMatch("a\\x", "a/[b-c]", { windows = false }))
			assert(not isMatch("a\\a", "a/[a-z]", { windows = false }))
			assert(not isMatch("a\\b", "a/[a-z]", { windows = false }))
			assert(not isMatch("a\\c", "a/[a-z]", { windows = false }))
			assert(not isMatch("a\\x\\y", "a/[a-z]", { windows = false }))
			assert(not isMatch("a\\x", "a/[a-z]", { windows = false }))
		end)

		itFIXME("should not match slashes with single stars", function()
			assert(isMatch("a", "*"))
			assert(isMatch("b", "*"))
			assert(not isMatch("a\\a", "*"))
			assert(not isMatch("a\\b", "*"))
			assert(not isMatch("a\\c", "*"))
			assert(not isMatch("a\\x", "*"))
			assert(not isMatch("a\\a\\a", "*"))
			assert(not isMatch("a\\a\\b", "*"))
			assert(not isMatch("a\\a\\a\\a", "*"))
			assert(not isMatch("a\\a\\a\\a\\a", "*"))
			assert(not isMatch("x\\y", "*"))
			assert(not isMatch("z\\z", "*"))
			assert(not isMatch("a", "*/*"))
			assert(not isMatch("b", "*/*"))
			assert(isMatch("a\\a", "*/*"))
			assert(isMatch("a\\b", "*/*"))
			assert(isMatch("a\\c", "*/*"))
			assert(isMatch("a\\x", "*/*"))
			assert(not isMatch("a\\a\\a", "*/*"))
			assert(not isMatch("a\\a\\b", "*/*"))
			assert(not isMatch("a\\a\\a\\a", "*/*"))
			assert(not isMatch("a\\a\\a\\a\\a", "*/*"))
			assert(isMatch("x\\y", "*/*"))
			assert(isMatch("z\\z", "*/*"))
			assert(not isMatch("a", "*/*/*"))
			assert(not isMatch("b", "*/*/*"))
			assert(not isMatch("a\\a", "*/*/*"))
			assert(not isMatch("a\\b", "*/*/*"))
			assert(not isMatch("a\\c", "*/*/*"))
			assert(not isMatch("a\\x", "*/*/*"))
			assert(isMatch("a\\a\\a", "*/*/*"))
			assert(isMatch("a\\a\\b", "*/*/*"))
			assert(not isMatch("a\\a\\a\\a", "*/*/*"))
			assert(not isMatch("a\\a\\a\\a\\a", "*/*/*"))
			assert(not isMatch("x\\y", "*/*/*"))
			assert(not isMatch("z\\z", "*/*/*"))
			assert(not isMatch("a", "*/*/*/*"))
			assert(not isMatch("b", "*/*/*/*"))
			assert(not isMatch("a\\a", "*/*/*/*"))
			assert(not isMatch("a\\b", "*/*/*/*"))
			assert(not isMatch("a\\c", "*/*/*/*"))
			assert(not isMatch("a\\x", "*/*/*/*"))
			assert(not isMatch("a\\a\\a", "*/*/*/*"))
			assert(not isMatch("a\\a\\b", "*/*/*/*"))
			assert(isMatch("a\\a\\a\\a", "*/*/*/*"))
			assert(not isMatch("a\\a\\a\\a\\a", "*/*/*/*"))
			assert(not isMatch("x\\y", "*/*/*/*"))
			assert(not isMatch("z\\z", "*/*/*/*"))
			assert(not isMatch("a", "*/*/*/*/*"))
			assert(not isMatch("b", "*/*/*/*/*"))
			assert(not isMatch("a\\a", "*/*/*/*/*"))
			assert(not isMatch("a\\b", "*/*/*/*/*"))
			assert(not isMatch("a\\c", "*/*/*/*/*"))
			assert(not isMatch("a\\x", "*/*/*/*/*"))
			assert(not isMatch("a\\a\\a", "*/*/*/*/*"))
			assert(not isMatch("a\\a\\b", "*/*/*/*/*"))
			assert(not isMatch("a\\a\\a\\a", "*/*/*/*/*"))
			assert(isMatch("a\\a\\a\\a\\a", "*/*/*/*/*"))
			assert(not isMatch("x\\y", "*/*/*/*/*"))
			assert(not isMatch("z\\z", "*/*/*/*/*"))
			assert(not isMatch("a", "a/*"))
			assert(not isMatch("b", "a/*"))
			assert(isMatch("a\\a", "a/*"))
			assert(isMatch("a\\b", "a/*"))
			assert(isMatch("a\\c", "a/*"))
			assert(isMatch("a\\x", "a/*"))
			assert(not isMatch("a\\a\\a", "a/*"))
			assert(not isMatch("a\\a\\b", "a/*"))
			assert(not isMatch("a\\a\\a\\a", "a/*"))
			assert(not isMatch("a\\a\\a\\a\\a", "a/*"))
			assert(not isMatch("x\\y", "a/*"))
			assert(not isMatch("z\\z", "a/*"))
			assert(not isMatch("a", "a/*/*"))
			assert(not isMatch("b", "a/*/*"))
			assert(not isMatch("a\\a", "a/*/*"))
			assert(not isMatch("a\\b", "a/*/*"))
			assert(not isMatch("a\\c", "a/*/*"))
			assert(not isMatch("a\\x", "a/*/*"))
			assert(isMatch("a\\a\\a", "a/*/*"))
			assert(isMatch("a\\a\\b", "a/*/*"))
			assert(not isMatch("a\\a\\a\\a", "a/*/*"))
			assert(not isMatch("a\\a\\a\\a\\a", "a/*/*"))
			assert(not isMatch("x\\y", "a/*/*"))
			assert(not isMatch("z\\z", "a/*/*"))
			assert(not isMatch("a", "a/*/*/*"))
			assert(not isMatch("b", "a/*/*/*"))
			assert(not isMatch("a\\a", "a/*/*/*"))
			assert(not isMatch("a\\b", "a/*/*/*"))
			assert(not isMatch("a\\c", "a/*/*/*"))
			assert(not isMatch("a\\x", "a/*/*/*"))
			assert(not isMatch("a\\a\\a", "a/*/*/*"))
			assert(not isMatch("a\\a\\b", "a/*/*/*"))
			assert(isMatch("a\\a\\a\\a", "a/*/*/*"))
			assert(not isMatch("a\\a\\a\\a\\a", "a/*/*/*"))
			assert(not isMatch("x\\y", "a/*/*/*"))
			assert(not isMatch("z\\z", "a/*/*/*"))
			assert(not isMatch("a", "a/*/*/*/*"))
			assert(not isMatch("b", "a/*/*/*/*"))
			assert(not isMatch("a\\a", "a/*/*/*/*"))
			assert(not isMatch("a\\b", "a/*/*/*/*"))
			assert(not isMatch("a\\c", "a/*/*/*/*"))
			assert(not isMatch("a\\x", "a/*/*/*/*"))
			assert(not isMatch("a\\a\\a", "a/*/*/*/*"))
			assert(not isMatch("a\\a\\b", "a/*/*/*/*"))
			assert(not isMatch("a\\a\\a\\a", "a/*/*/*/*"))
			assert(isMatch("a\\a\\a\\a\\a", "a/*/*/*/*"))
			assert(not isMatch("x\\y", "a/*/*/*/*"))
			assert(not isMatch("z\\z", "a/*/*/*/*"))
			assert(not isMatch("a", "a/*/a"))
			assert(not isMatch("b", "a/*/a"))
			assert(not isMatch("a\\a", "a/*/a"))
			assert(not isMatch("a\\b", "a/*/a"))
			assert(not isMatch("a\\c", "a/*/a"))
			assert(not isMatch("a\\x", "a/*/a"))
			assert(isMatch("a\\a\\a", "a/*/a"))
			assert(not isMatch("a\\a\\b", "a/*/a"))
			assert(not isMatch("a\\a\\a\\a", "a/*/a"))
			assert(not isMatch("a\\a\\a\\a\\a", "a/*/a"))
			assert(not isMatch("x\\y", "a/*/a"))
			assert(not isMatch("z\\z", "a/*/a"))
			assert(not isMatch("a", "a/*/b"))
			assert(not isMatch("b", "a/*/b"))
			assert(not isMatch("a\\a", "a/*/b"))
			assert(not isMatch("a\\b", "a/*/b"))
			assert(not isMatch("a\\c", "a/*/b"))
			assert(not isMatch("a\\x", "a/*/b"))
			assert(not isMatch("a\\a\\a", "a/*/b"))
			assert(isMatch("a\\a\\b", "a/*/b"))
			assert(not isMatch("a\\a\\a\\a", "a/*/b"))
			assert(not isMatch("a\\a\\a\\a\\a", "a/*/b"))
			assert(not isMatch("x\\y", "a/*/b"))
			assert(not isMatch("z\\z", "a/*/b"))
			assert(not isMatch("a", "*/*", { windows = false }))
			assert(not isMatch("b", "*/*", { windows = false }))
			assert(not isMatch("a\\a", "*/*", { windows = false }))
			assert(not isMatch("a\\b", "*/*", { windows = false }))
			assert(not isMatch("a\\c", "*/*", { windows = false }))
			assert(not isMatch("a\\x", "*/*", { windows = false }))
			assert(not isMatch("a\\a\\a", "*/*", { windows = false }))
			assert(not isMatch("a\\a\\b", "*/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a", "*/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a\\a", "*/*", { windows = false }))
			assert(not isMatch("x\\y", "*/*", { windows = false }))
			assert(not isMatch("z\\z", "*/*", { windows = false }))
			assert(not isMatch("a", "*/*/*", { windows = false }))
			assert(not isMatch("b", "*/*/*", { windows = false }))
			assert(not isMatch("a\\a", "*/*/*", { windows = false }))
			assert(not isMatch("a\\b", "*/*/*", { windows = false }))
			assert(not isMatch("a\\c", "*/*/*", { windows = false }))
			assert(not isMatch("a\\x", "*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a", "*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\b", "*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a", "*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a\\a", "*/*/*", { windows = false }))
			assert(not isMatch("x\\y", "*/*/*", { windows = false }))
			assert(not isMatch("z\\z", "*/*/*", { windows = false }))
			assert(not isMatch("a", "*/*/*/*", { windows = false }))
			assert(not isMatch("b", "*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a", "*/*/*/*", { windows = false }))
			assert(not isMatch("a\\b", "*/*/*/*", { windows = false }))
			assert(not isMatch("a\\c", "*/*/*/*", { windows = false }))
			assert(not isMatch("a\\x", "*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a", "*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\b", "*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a", "*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a\\a", "*/*/*/*", { windows = false }))
			assert(not isMatch("x\\y", "*/*/*/*", { windows = false }))
			assert(not isMatch("z\\z", "*/*/*/*", { windows = false }))
			assert(not isMatch("a", "*/*/*/*/*", { windows = false }))
			assert(not isMatch("b", "*/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a", "*/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\b", "*/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\c", "*/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\x", "*/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a", "*/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\b", "*/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a", "*/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a\\a", "*/*/*/*/*", { windows = false }))
			assert(not isMatch("x\\y", "*/*/*/*/*", { windows = false }))
			assert(not isMatch("z\\z", "*/*/*/*/*", { windows = false }))
			assert(not isMatch("a", "a/*", { windows = false }))
			assert(not isMatch("b", "a/*", { windows = false }))
			assert(not isMatch("a\\a", "a/*", { windows = false }))
			assert(not isMatch("a\\b", "a/*", { windows = false }))
			assert(not isMatch("a\\c", "a/*", { windows = false }))
			assert(not isMatch("a\\x", "a/*", { windows = false }))
			assert(not isMatch("a\\a\\a", "a/*", { windows = false }))
			assert(not isMatch("a\\a\\b", "a/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a", "a/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a\\a", "a/*", { windows = false }))
			assert(not isMatch("x\\y", "a/*", { windows = false }))
			assert(not isMatch("z\\z", "a/*", { windows = false }))
			assert(not isMatch("a", "a/*/*", { windows = false }))
			assert(not isMatch("b", "a/*/*", { windows = false }))
			assert(not isMatch("a\\a", "a/*/*", { windows = false }))
			assert(not isMatch("a\\b", "a/*/*", { windows = false }))
			assert(not isMatch("a\\c", "a/*/*", { windows = false }))
			assert(not isMatch("a\\x", "a/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a", "a/*/*", { windows = false }))
			assert(not isMatch("a\\a\\b", "a/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a", "a/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a\\a", "a/*/*", { windows = false }))
			assert(not isMatch("x\\y", "a/*/*", { windows = false }))
			assert(not isMatch("z\\z", "a/*/*", { windows = false }))
			assert(not isMatch("a", "a/*/*/*", { windows = false }))
			assert(not isMatch("b", "a/*/*/*", { windows = false }))
			assert(not isMatch("a\\a", "a/*/*/*", { windows = false }))
			assert(not isMatch("a\\b", "a/*/*/*", { windows = false }))
			assert(not isMatch("a\\c", "a/*/*/*", { windows = false }))
			assert(not isMatch("a\\x", "a/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a", "a/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\b", "a/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a", "a/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a\\a", "a/*/*/*", { windows = false }))
			assert(not isMatch("x\\y", "a/*/*/*", { windows = false }))
			assert(not isMatch("z\\z", "a/*/*/*", { windows = false }))
			assert(not isMatch("a", "a/*/*/*/*", { windows = false }))
			assert(not isMatch("b", "a/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a", "a/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\b", "a/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\c", "a/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\x", "a/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a", "a/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\b", "a/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a", "a/*/*/*/*", { windows = false }))
			assert(not isMatch("a\\a\\a\\a\\a", "a/*/*/*/*", { windows = false }))
			assert(not isMatch("x\\y", "a/*/*/*/*", { windows = false }))
			assert(not isMatch("z\\z", "a/*/*/*/*", { windows = false }))
			assert(not isMatch("a", "a/*/a", { windows = false }))
			assert(not isMatch("b", "a/*/a", { windows = false }))
			assert(not isMatch("a\\a", "a/*/a", { windows = false }))
			assert(not isMatch("a\\b", "a/*/a", { windows = false }))
			assert(not isMatch("a\\c", "a/*/a", { windows = false }))
			assert(not isMatch("a\\x", "a/*/a", { windows = false }))
			assert(not isMatch("a\\a\\a", "a/*/a", { windows = false }))
			assert(not isMatch("a\\a\\b", "a/*/a", { windows = false }))
			assert(not isMatch("a\\a\\a\\a", "a/*/a", { windows = false }))
			assert(not isMatch("a\\a\\a\\a\\a", "a/*/a", { windows = false }))
			assert(not isMatch("x\\y", "a/*/a", { windows = false }))
			assert(not isMatch("z\\z", "a/*/a", { windows = false }))
			assert(not isMatch("a", "a/*/b", { windows = false }))
			assert(not isMatch("b", "a/*/b", { windows = false }))
			assert(not isMatch("a\\a", "a/*/b", { windows = false }))
			assert(not isMatch("a\\b", "a/*/b", { windows = false }))
			assert(not isMatch("a\\c", "a/*/b", { windows = false }))
			assert(not isMatch("a\\x", "a/*/b", { windows = false }))
			assert(not isMatch("a\\a\\a", "a/*/b", { windows = false }))
			assert(not isMatch("a\\a\\b", "a/*/b", { windows = false }))
			assert(not isMatch("a\\a\\a\\a", "a/*/b", { windows = false }))
			assert(not isMatch("a\\a\\a\\a\\a", "a/*/b", { windows = false }))
			assert(not isMatch("x\\y", "a/*/b", { windows = false }))
			assert(not isMatch("z\\z", "a/*/b", { windows = false }))
		end)

		itFIXME("should support globstars (**)", function()
			assert(isMatch("a\\a", "a/**"))
			assert(isMatch("a\\b", "a/**"))
			assert(isMatch("a\\c", "a/**"))
			assert(isMatch("a\\x", "a/**"))
			assert(isMatch("a\\x\\y", "a/**"))
			assert(isMatch("a\\x\\y\\z", "a/**"))
			assert(isMatch("a\\a", "a/**/*"))
			assert(isMatch("a\\b", "a/**/*"))
			assert(isMatch("a\\c", "a/**/*"))
			assert(isMatch("a\\x", "a/**/*"))
			assert(isMatch("a\\x\\y", "a/**/*"))
			assert(isMatch("a\\x\\y\\z", "a/**/*"))
			assert(isMatch("a\\a", "a/**/**/*"))
			assert(isMatch("a\\b", "a/**/**/*"))
			assert(isMatch("a\\c", "a/**/**/*"))
			assert(isMatch("a\\x", "a/**/**/*"))
			assert(isMatch("a\\x\\y", "a/**/**/*"))
			assert(isMatch("a\\x\\y\\z", "a/**/**/*"))
		end)

		it("should not match backslashes with globstars when disabled", function()
			assert(not isMatch("a\\a", "a/**", { windows = false }))
			assert(not isMatch("a\\b", "a/**", { windows = false }))
			assert(not isMatch("a\\c", "a/**", { windows = false }))
			assert(not isMatch("a\\x", "a/**", { windows = false }))
			assert(not isMatch("a\\x\\y", "a/**", { windows = false }))
			assert(not isMatch("a\\x\\y\\z", "a/**", { windows = false }))
			assert(not isMatch("a\\a", "a/**/*", { windows = false }))
			assert(not isMatch("a\\b", "a/**/*", { windows = false }))
			assert(not isMatch("a\\c", "a/**/*", { windows = false }))
			assert(not isMatch("a\\x", "a/**/*", { windows = false }))
			assert(not isMatch("a\\x\\y", "a/**/*", { windows = false }))
			assert(not isMatch("a\\x\\y\\z", "a/**/*", { windows = false }))
			assert(not isMatch("a\\a", "a/**/**/*", { windows = false }))
			assert(not isMatch("a\\b", "a/**/**/*", { windows = false }))
			assert(not isMatch("a\\c", "a/**/**/*", { windows = false }))
			assert(not isMatch("a\\x", "a/**/**/*", { windows = false }))
			assert(not isMatch("a\\x\\y", "a/**/**/*", { windows = false }))
			assert(not isMatch("a\\x\\y\\z", "a/**/**/*", { windows = false }))
		end)

		itFIXME("should work with file extensions", function()
			assert(isMatch("a.txt", "a*.txt"))
			assert(not isMatch("a\\b.txt", "a*.txt"))
			assert(not isMatch("a\\x\\y.txt", "a*.txt"))
			assert(not isMatch("a\\x\\y\\z", "a*.txt"))
			assert(isMatch("a.txt", "a.txt"))
			assert(not isMatch("a\\b.txt", "a.txt"))
			assert(not isMatch("a\\x\\y.txt", "a.txt"))
			assert(not isMatch("a\\x\\y\\z", "a.txt"))
			assert(not isMatch("a.txt", "a/**/*.txt"))
			assert(isMatch("a\\b.txt", "a/**/*.txt"))
			assert(isMatch("a\\x\\y.txt", "a/**/*.txt"))
			assert(not isMatch("a\\x\\y\\z", "a/**/*.txt"))
			assert(not isMatch("a.txt", "a/**/*.txt", { windows = false }))
			assert(not isMatch("a\\b.txt", "a/**/*.txt", { windows = false }))
			assert(not isMatch("a\\x\\y.txt", "a/**/*.txt", { windows = false }))
			assert(not isMatch("a\\x\\y\\z", "a/**/*.txt", { windows = false }))
			assert(not isMatch("a.txt", "a/*.txt"))
			assert(isMatch("a\\b.txt", "a/*.txt"))
			assert(not isMatch("a\\x\\y.txt", "a/*.txt"))
			assert(not isMatch("a\\x\\y\\z", "a/*.txt"))
			assert(not isMatch("a.txt", "a/*.txt", { windows = false }))
			assert(not isMatch("a\\b.txt", "a/*.txt", { windows = false }))
			assert(not isMatch("a\\x\\y.txt", "a/*.txt", { windows = false }))
			assert(not isMatch("a\\x\\y\\z", "a/*.txt", { windows = false }))
			assert(not isMatch("a.txt", "a/*/*.txt"))
			assert(not isMatch("a\\b.txt", "a/*/*.txt"))
			assert(isMatch("a\\x\\y.txt", "a/*/*.txt"))
			assert(not isMatch("a\\x\\y\\z", "a/*/*.txt"))
			assert(not isMatch("a.txt", "a/*/*.txt", { windows = false }))
			assert(not isMatch("a\\b.txt", "a/*/*.txt", { windows = false }))
			assert(not isMatch("a\\x\\y.txt", "a/*/*.txt", { windows = false }))
			assert(not isMatch("a\\x\\y\\z", "a/*/*.txt", { windows = false }))
		end)

		itFIXME("should support negation patterns", function()
			assert(isMatch("a", "!a/b"))
			assert(isMatch("a\\a", "!a/b"))
			assert(not isMatch("a\\b", "!a/b"))
			assert(isMatch("a\\c", "!a/b"))
			assert(isMatch("b\\a", "!a/b"))
			assert(isMatch("b\\b", "!a/b"))
			assert(isMatch("b\\c", "!a/b"))
			assert(isMatch("a", "!*/c"))
			assert(isMatch("a\\a", "!*/c"))
			assert(isMatch("a\\b", "!*/c"))
			assert(not isMatch("a\\c", "!*/c"))
			assert(isMatch("b\\a", "!*/c"))
			assert(isMatch("b\\b", "!*/c"))
			assert(not isMatch("b\\c", "!*/c"))
			assert(isMatch("a", "!a/b"))
			assert(isMatch("a\\a", "!a/b"))
			assert(not isMatch("a\\b", "!a/b"))
			assert(isMatch("a\\c", "!a/b"))
			assert(isMatch("b\\a", "!a/b"))
			assert(isMatch("b\\b", "!a/b"))
			assert(isMatch("b\\c", "!a/b"))
			assert(isMatch("a", "!*/c"))
			assert(isMatch("a\\a", "!*/c"))
			assert(isMatch("a\\b", "!*/c"))
			assert(not isMatch("a\\c", "!*/c"))
			assert(isMatch("b\\a", "!*/c"))
			assert(isMatch("b\\b", "!*/c"))
			assert(not isMatch("b\\c", "!*/c"))
			assert(isMatch("a", "!a/(b)"))
			assert(isMatch("a\\a", "!a/(b)"))
			assert(not isMatch("a\\b", "!a/(b)"))
			assert(isMatch("a\\c", "!a/(b)"))
			assert(isMatch("b\\a", "!a/(b)"))
			assert(isMatch("b\\b", "!a/(b)"))
			assert(isMatch("b\\c", "!a/(b)"))
			assert(isMatch("a", "!(a/b)"))
			assert(isMatch("a\\a", "!(a/b)"))
			assert(not isMatch("a\\b", "!(a/b)"))
			assert(isMatch("a\\c", "!(a/b)"))
			assert(isMatch("b\\a", "!(a/b)"))
			assert(isMatch("b\\b", "!(a/b)"))
			assert(isMatch("b\\c", "!(a/b)"))
		end)
	end)
end
