package Ġcom . stats ig . android sdk Ċ Ċ import Ġandroid . content . Context Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Object Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test ĊĊ Ċ class ĠStore Test Ġ{ ĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġinternal Ġfun Ġsetup () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġmock k Object ( Stats ig Util ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStats ig Util . get Has hed String ( any ()) ĊĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Arg < String >() Ġ+ Ġ" !" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Init Value ( value : ĠString , Ġin Experiment : ĠBoolean Ġ= Ġfalse , Ġactive : ĠBoolean Ġ= Ġfalse ): ĠInitialize Response Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠInitialize Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfeature G ates Ġ= Ġmap Of (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigs Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" config !" Ġto ĠAP ID ynamic Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" config !", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Map Of (" key " Ġto Ġvalue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exp !" Ġto ĠAP ID ynamic Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exp !", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Map Of (" key " Ġto Ġvalue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Device Based Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis User In Experiment Ġ= Ġin Experiment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Experiment Active Ġ= Ġactive , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" device _ exp !" Ġto ĠAP ID ynamic Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" device _ exp !", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Map Of (" key " Ġto Ġvalue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Device Based Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis User In Experiment Ġ= Ġin Experiment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Experiment Active Ġ= Ġactive , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exp _ non _ stick !" Ġto ĠAP ID ynamic Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" non _ stick _ exp !", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Map Of (" key " Ġto Ġvalue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Device Based Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis User In Experiment Ġ= Ġin Experiment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Experiment Active Ġ= Ġactive , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Updates Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= Ġ 1 6 2 1 6 3 7 8 3 9 , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Config Name Not Has hed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstore Ġ= ĠStore (" j kw ", ĠTest SharedPreferences ()) ĊĠĠĠĠĠĠĠ Ġstore . save ( get Init Value (" v 0 ", Ġin Experiment Ġ= Ġtrue , Ġactive Ġ= Ġtrue )) ĊĊĠĠĠĠĠĠĠ Ġvar Ġconfig Ġ= Ġstore . get Experiment (" config ", Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" config ", Ġconfig . getName ()) ĊĠĠĠĠĠĠĠ Ġvar Ġconfig Fake Ġ= Ġstore . get Experiment (" config _ fake ", Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" config _ fake ", Ġconfig Fake . getName ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Sticky Bucket ing () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstore Ġ= ĠStore (" j kw ", ĠTest SharedPreferences ()) ĊĠĠĠĠĠĠĠ Ġstore . save ( get Init Value (" v 0 ", Ġin Experiment Ġ= Ġtrue , Ġactive Ġ= Ġtrue )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġgetting Ġvalues Ġwith Ġkeep Device Value Ġ= Ġfalse Ġfirst ĊĠĠĠĠĠĠĠ Ġvar Ġconfig Ġ= Ġstore . get Experiment (" config ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġvar Ġexp Ġ= Ġstore . get Experiment (" exp ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġvar Ġdevice Exp Ġ= Ġstore . get Experiment (" device _ exp ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġvar Ġnon Stick Exp Ġ= Ġstore . get Experiment (" exp _ non _ stick ", Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 0 ", Ġconfig . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 0 ", Ġexp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 0 ", Ġdevice Exp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 0 ", Ġnon Stick Exp . getString (" key ", Ġ"")) ĊĊĠĠĠĠĠĠĠ Ġ// Ġupdate Ġvalues , Ġand Ġthen Ġget Ġwith Ġflag Ġset Ġto Ġtrue . ĠAll Ġvalues Ġshould Ġupdate ĊĠĠĠĠĠĠĠ Ġstore . save ( get Init Value (" v 1 ", Ġin Experiment Ġ= Ġtrue , Ġactive Ġ= Ġtrue )) ĊĊĠĠĠĠĠĠĠ Ġconfig Ġ= Ġstore . get Experiment (" config ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġexp Ġ= Ġstore . get Experiment (" exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġdevice Exp Ġ= Ġstore . get Experiment (" device _ exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġnon Stick Exp Ġ= Ġstore . get Experiment (" exp _ non _ stick ", Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġconfig . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġexp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġdevice Exp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġnon Stick Exp . getString (" key ", Ġ"")) ĊĊĠĠĠĠĠĠĠ Ġ// Ġupdate Ġvalues Ġagain . ĠNow Ġsome Ġvalues Ġshould Ġbe Ġsticky Ġexcept Ġthe Ġnon - sticky Ġones ĊĠĠĠĠĠĠĠ Ġstore . save ( get Init Value (" v 2 ", Ġin Experiment Ġ= Ġtrue , Ġactive Ġ= Ġtrue )) ĊĊĠĠĠĠĠĠĠ Ġconfig Ġ= Ġstore . get Experiment (" config ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġexp Ġ= Ġstore . get Experiment (" exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġdevice Exp Ġ= Ġstore . get Experiment (" device _ exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġnon Stick Exp Ġ= Ġstore . get Experiment (" exp _ non _ stick ", Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 2 ", Ġconfig . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġexp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġdevice Exp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 2 ", Ġnon Stick Exp . getString (" key ", Ġ"")) ĊĊĠĠĠĠĠĠĠ Ġ// Ġupdate Ġthe Ġexperiments Ġso Ġthat Ġthe Ġuser Ġis Ġno Ġlonger Ġin Ġexperiments , Ġshould Ġstill Ġbe Ġsticky Ġfor Ġthe Ġright Ġones ĊĠĠĠĠĠĠĠ Ġstore . save ( get Init Value (" v 3 ", Ġin Experiment Ġ= Ġfalse , Ġactive Ġ= Ġtrue )) ĊĊĠĠĠĠĠĠĠ Ġconfig Ġ= Ġstore . get Experiment (" config ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġexp Ġ= Ġstore . get Experiment (" exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġdevice Exp Ġ= Ġstore . get Experiment (" device _ exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġnon Stick Exp Ġ= Ġstore . get Experiment (" exp _ non _ stick ", Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 3 ", Ġconfig . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġexp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġdevice Exp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 3 ", Ġnon Stick Exp . getString (" key ", Ġ"")) ĊĊĠĠĠĠĠĠĠ Ġ// Ġupdate Ġthe Ġexperiments Ġto Ġno Ġlonger Ġbe Ġactive , Ġvalues Ġshould Ġupdate ĊĠĠĠĠĠĠĠ Ġstore . save ( get Init Value (" v 4 ", Ġin Experiment Ġ= Ġfalse , Ġactive Ġ= Ġfalse )) ĊĊĠĠĠĠĠĠĠ Ġconfig Ġ= Ġstore . get Experiment (" config ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġexp Ġ= Ġstore . get Experiment (" exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġdevice Exp Ġ= Ġstore . get Experiment (" device _ exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġnon Stick Exp Ġ= Ġstore . get Experiment (" exp _ non _ stick ", Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 4 ", Ġconfig . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 4 ", Ġexp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 4 ", Ġdevice Exp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 4 ", Ġnon Stick Exp . getString (" key ", Ġ"")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Sticky Behavior When Reset ting User () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstore Ġ= ĠStore (" j kw ", ĠTest SharedPreferences ()) ĊĠĠĠĠĠĠĠ Ġstore . save ( get Init Value (" v 0 ", Ġin Experiment Ġ= Ġtrue , Ġactive Ġ= Ġtrue )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġgetting Ġvalues Ġwith Ġkeep Device Value Ġ= Ġfalse Ġfirst ĊĠĠĠĠĠĠĠ Ġvar Ġconfig Ġ= Ġstore . get Experiment (" config ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġvar Ġexp Ġ= Ġstore . get Experiment (" exp ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġvar Ġdevice Exp Ġ= Ġstore . get Experiment (" device _ exp ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġvar Ġnon Stick Exp Ġ= Ġstore . get Experiment (" exp _ non _ stick ", Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 0 ", Ġconfig . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 0 ", Ġexp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 0 ", Ġdevice Exp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 0 ", Ġnon Stick Exp . getString (" key ", Ġ"")) ĊĊĠĠĠĠĠĠĠ Ġ// Ġupdate Ġvalues , Ġand Ġthen Ġget Ġwith Ġflag Ġset Ġto Ġtrue . ĠAll Ġvalues Ġshould Ġupdate ĊĠĠĠĠĠĠĠ Ġstore . save ( get Init Value (" v 1 ", Ġin Experiment Ġ= Ġtrue , Ġactive Ġ= Ġtrue )) ĊĊĠĠĠĠĠĠĠ Ġconfig Ġ= Ġstore . get Experiment (" config ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġexp Ġ= Ġstore . get Experiment (" exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġdevice Exp Ġ= Ġstore . get Experiment (" device _ exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġnon Stick Exp Ġ= Ġstore . get Experiment (" exp _ non _ stick ", Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġconfig . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġexp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġdevice Exp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġnon Stick Exp . getString (" key ", Ġ"")) ĊĊĠĠĠĠĠĠĠ Ġ// Ġreset Ġto Ġa Ġdifferent Ġuser . ĠOnly Ġdevice Ġexp Ġshould Ġstick ĊĠĠĠĠĠĠĠ Ġstore . load And Reset Sticky User Values (" tore ") ĊĠĠĠĠĠĠĠ Ġstore . save ( get Init Value (" v 2 ", Ġin Experiment Ġ= Ġtrue , Ġactive Ġ= Ġtrue )) ĊĊĠĠĠĠĠĠĠ Ġconfig Ġ= Ġstore . get Experiment (" config ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġexp Ġ= Ġstore . get Experiment (" exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġdevice Exp Ġ= Ġstore . get Experiment (" device _ exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġnon Stick Exp Ġ= Ġstore . get Experiment (" exp _ non _ stick ", Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 2 ", Ġconfig . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 2 ", Ġexp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġdevice Exp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 2 ", Ġnon Stick Exp . getString (" key ", Ġ"")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Sticky Behavior Ac ross Sessions () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshared Prefs Ġ= ĠTest SharedPreferences () ĊĠĠĠĠĠĠĠ Ġvar Ġstore Ġ= ĠStore (" j kw ", Ġshared Prefs ) ĊĠĠĠĠĠĠĠ Ġstore . save ( get Init Value (" v 0 ", Ġin Experiment Ġ= Ġtrue , Ġactive Ġ= Ġtrue )) ĊĊĠĠĠĠĠĠĠ Ġvar Ġconfig Ġ= Ġstore . get Experiment (" config ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġvar Ġexp Ġ= Ġstore . get Experiment (" exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġvar Ġdevice Exp Ġ= Ġstore . get Experiment (" device _ exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġvar Ġnon Stick Exp Ġ= Ġstore . get Experiment (" exp _ non _ stick ", Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 0 ", Ġconfig . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 0 ", Ġexp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 0 ", Ġdevice Exp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 0 ", Ġnon Stick Exp . getString (" key ", Ġ"")) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRe - create Ġstore Ġwith Ġa Ġdifferent Ġuser ĠID , Ġupdate Ġthe Ġvalues , Ġuser Ġshould Ġstill Ġget Ġsticky Ġvalue Ġfor Ġdevice Ġand Ġonly Ġdevice ĊĠĠĠĠĠĠĠ Ġstore Ġ= ĠStore (" tore ", Ġshared Prefs ) ĊĠĠĠĠĠĠĠ Ġstore . save ( get Init Value (" v 1 ", Ġin Experiment Ġ= Ġtrue , Ġactive Ġ= Ġtrue )) ĊĊĠĠĠĠĠĠĠ Ġconfig Ġ= Ġstore . get Experiment (" config ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġexp Ġ= Ġstore . get Experiment (" exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġdevice Exp Ġ= Ġstore . get Experiment (" device _ exp ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġnon Stick Exp Ġ= Ġstore . get Experiment (" exp _ non _ stick ", Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġconfig . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġexp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 0 ", Ġdevice Exp . getString (" key ", Ġ"")) ĊĠĠĠĠĠĠĠ ĠassertEquals (" v 1 ", Ġnon Stick Exp . getString (" key ", Ġ"")) ĊĠĠĠ Ġ} Ċ } Ċ