/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 1 6 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . intellij . diff . comparison Ċ Ċ import Ġcom . intellij . diff . Diff TestCase Ċ Ċ class ĠMerge Resolve Util Test Ġ: ĠDiff TestCase () Ġ{ ĊĠ Ġfun Ġtest Simple () Ġ{ ĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠ Ġ"" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ" x Ġx Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx Ġx " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ" x Ġx Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ" x Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ" x ĠX Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx ", ĊĠĠĠĠĠ Ġ" x ĠX Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx " ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġtest Same Modification () Ġ{ ĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ" x Ġx Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ" x Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ" x ĠX Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx " ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġtest Non Conflict ing Changes () Ġ{ ĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ" x Ġx Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx ĠZ Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx ĠZ Ġx " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ" x ", ĊĠĠĠĠĠ Ġ" x ĠY ", ĊĠĠĠĠĠ Ġ" Z Ġx ", ĊĠĠĠĠĠ Ġ" Z Ġx ĠY " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ" x Ġx ", ĊĠĠĠĠĠ Ġ" x ", ĊĠĠĠĠĠ Ġ" Z Ġx Ġx ", ĊĠĠĠĠĠ Ġ" Z Ġx " ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġtest Failure () Ġ{ ĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ" x Ġx Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx ", ĊĠĠĠĠĠ Ġ" x ĠZ Ġx ", ĊĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ" x Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx ", ĊĠĠĠĠĠ Ġ" x ĠZ Ġx ", ĊĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġtest Non Failure Conflict s () Ġ{ ĊĠĠĠ Ġtest G reedy ( ĊĠĠĠĠĠ Ġ" x ĠX Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx ", ĊĠĠĠĠĠ Ġ" x ĠX ĠY Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest G reedy ( ĊĠĠĠĠĠ Ġ" x ĠX Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY ĠX Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest G reedy ( ĊĠĠĠĠĠ Ġ" x ĠX ĠY Ġx ", ĊĠĠĠĠĠ Ġ" x ĠX Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest G reedy ( ĊĠĠĠĠĠ Ġ" x ĠX ĠY ĠZ Ġx ", ĊĠĠĠĠĠ Ġ" x ĠX Ġx ", ĊĠĠĠĠĠ Ġ" x ĠZ Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest G reedy ( ĊĠĠĠĠĠ Ġ" x ĠA ĠB ĠC ĠD ĠE ĠF ĠG ĠH ĠK Ġx ", ĊĠĠĠĠĠ Ġ" x ĠC ĠF ĠK Ġx ", ĊĠĠĠĠĠ Ġ" x ĠA ĠD ĠH Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx " ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġtest Conf using Conflict s () Ġ{ ĊĠĠĠ Ġ// Ġthese Ġcases Ġmight Ġbe Ġa Ġfailure Ġas Ġwell ĊĊĠĠĠ Ġtest G reedy ( ĊĠĠĠĠĠ Ġ" x ĠX Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx ", ĊĠĠĠĠĠ Ġ" x ĠZ Ġx ", ĊĠĠĠĠĠ Ġ" x Z Ġx " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest G reedy ( ĊĠĠĠĠĠ Ġ" x ĠX ĠX Ġx ", ĊĠĠĠĠĠ Ġ" x ĠX ĠY ĠX Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest G reedy ( ĊĠĠĠĠĠ Ġ" x ĠX Ġx ", ĊĠĠĠĠĠ Ġ" x Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx ", ĊĠĠĠĠĠ Ġ" x Y Ġx " ĊĠĠĠ Ġ) ĊĊĊĠĠĠ Ġtest G reedy ( ĊĠĠĠĠĠ Ġ" x ĠX ĠX Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx ", ĊĠĠĠĠĠ Ġ" x ĠX ĠY Ġx ", ĊĠĠĠĠĠ Ġ" x ĠY Ġx " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// ĠIDEA - 2 0 0 6 9 6 ĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ" version : Ġ 1 . 0 . 0 ", ĊĠĠĠĠĠ Ġ" version : Ġ 2 . 0 . 0 ", ĊĠĠĠĠĠ Ġ" version : Ġ 1 . 0 . 4 ", ĊĠĠĠĠĠ Ġ" version : Ġ 2 . 0 . 4 " ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġtest Re gress ions () Ġ{ ĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ" i \ n ", ĊĠĠĠĠĠ Ġ" i ", ĊĠĠĠĠĠ Ġ"\ ni ", ĊĠĠĠĠĠ Ġ" i ", ĊĠĠĠĠĠ Ġ" i " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest Simple ( ĊĠĠĠĠĠ Ġ" Y ĠX ĠY ", ĊĠĠĠĠĠ Ġ" Y ĠC \ n X \ n C ĠY ", ĊĠĠĠĠĠ Ġ" Y Ġ\ n X \ n ĠY ", ĊĠĠĠĠĠ Ġ" Y Ġ\ n C \ n X \ n C ĠY " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġtest ( ĊĠĠĠĠĠ Ġ""" ĊĠ Ġpublic Ġstatic Ġclass ĠChange Data Ġ{ ĊĠĠĠ Ġ@ NotNull Ġpublic Ġfinal ĠChange Kind Ġkind ; ĊĠĠĠ Ġpublic Ġfinal Ġint Ġother Path ; ĊĊĠĠĠ Ġpublic ĠChange Data (@ NotNull ĠChange Kind Ġkind , Ġint Ġother Path ) Ġ{ ĊĠĠĠĠĠ Ġthis . kind Ġ= Ġkind ; ĊĠĠĠĠĠ Ġthis . other Path Ġ= Ġother Path ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġboolean Ġis Rename () Ġ{ ĊĠĠĠĠĠ Ġreturn Ġkind . equals ( Change Kind . RE NAMED _ FROM ) Ġ|| Ġkind . equals ( Change Kind . RE NAMED _ TO ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Override ĊĠĠĠ Ġpublic Ġint ĠhashCode () Ġ{ ĊĠĠĠĠĠ Ġreturn ĠObjects . hash ( kind , Ġother Path ); ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġenum ĠChange Kind Ġ{ ĊĠĠĠ ĠMO DI FIED (( byte ) 0 ), ĊĠĠĠ ĠR ENAME D _ FROM (( byte ) 1 ), ĊĠĠĠ ĠR ENAME D _ TO (( byte ) 2 ); """, ĊĠĠĠĠĠ Ġ""" ĊĠ Ġpublic Ġenum ĠChange Kind Ġ{ ĊĠĠĠ ĠNOT _ CHANGED (( byte )- 1 ), ĊĠĠĠ ĠMO DI FIED (( byte ) 0 ), ĊĠĠĠ ĠAD DED (( byte ) 1 ), ĊĠĠĠ ĠRE MOVED (( byte ) 2 ); """, ĊĠĠĠĠĠ Ġ""" ĊĠ Ġpublic Ġstatic Ġclass ĠChange Data Ġ{ ĊĠ Ġ@ NotNull Ġpublic Ġfinal ĠChange Kind Ġkind ; ĊĠ Ġpublic Ġfinal Ġint Ġother Path ; ĊĊĠ Ġpublic ĠChange Data (@ NotNull ĠChange Kind Ġkind , Ġint Ġother Path ) Ġ{ ĊĠĠĠ Ġthis . kind Ġ= Ġkind ; ĊĠĠĠ Ġthis . other Path Ġ= Ġother Path ; ĊĠ Ġ} ĊĊĠ Ġpublic Ġboolean Ġis Rename () Ġ{ ĊĠĠĠ Ġreturn Ġkind . equals ( Change Kind . RE NAMED _ FROM ) Ġ|| Ġkind . equals ( Change Kind . RE NAMED _ TO ); ĊĠ Ġ} ĊĊĠ Ġ@ Override ĊĠ Ġpublic Ġint ĠhashCode () Ġ{ ĊĠĠĠ Ġreturn ĠObjects . hash ( kind , Ġother Path ); ĊĠ Ġ} Ċ } Ċ Ċ private Ġenum ĠChange Kind Ġ{ ĊĠ ĠMO DI FIED (( byte ) 0 ), ĊĠ ĠR ENAME D _ FROM (( byte ) 1 ), ĊĠ ĠR ENAME D _ TO (( byte ) 2 ); """, ĊĠĠĠĠĠ Ġ""" ĊĠ Ġpublic Ġenum ĠChange Kind Ġ{ ĊĠĠĠ ĠNOT _ CHANGED (( byte )- 1 ), ĊĠ ĠMO DI FIED (( byte ) 0 ), ĊĠ ĠAD DED (( byte ) 1 ), ĊĠ ĠRE MOVED (( byte ) 2 ); """ ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtest Simple ( base : ĠString , Ġleft : ĠString , Ġright : ĠString , Ġexpected : ĠString ?) Ġ{ ĊĠĠĠ Ġval Ġsimple Result Ġ= ĠMerge Resolve Util . try Resolve ( left , Ġbase , Ġright ) ĊĠĠĠ ĠassertEquals ( expected , Ġsimple Result ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtest G reedy ( base : ĠString , Ġleft : ĠString , Ġright : ĠString , Ġexpected : ĠString ?) Ġ{ ĊĠĠĠ Ġval Ġg reedy Result Ġ= ĠMerge Resolve Util . try G reedy Resolve ( left , Ġbase , Ġright ) ĊĠĠĠ ĠassertEquals ( expected , Ġg reedy Result ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtest ( base : ĠString , Ġleft : ĠString , Ġright : ĠString , Ġexpected : ĠString ?) Ġ{ ĊĠĠĠ Ġtest Simple ( base , Ġleft , Ġright , Ġexpected ) ĊĠĠĠ Ġtest G reedy ( base , Ġleft , Ġright , Ġexpected ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtest ( base : ĠString , Ġleft : ĠString , Ġright : ĠString , Ġexpected Simple : ĠString ?, Ġexpected G reedy : ĠString ?) Ġ{ ĊĠĠĠ Ġtest Simple ( base , Ġleft , Ġright , Ġexpected Simple ) ĊĠĠĠ Ġtest G reedy ( base , Ġleft , Ġright , Ġexpected G reedy ) ĊĠ Ġ} Ċ } Ċ