1dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar/* 2dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * Copyright (C) 2015 The Android Open Source Project 3dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 4dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * you may not use this file except in compliance with the License. 5dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * You may obtain a copy of the License at 6dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 7dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * Unless required by applicable law or agreed to in writing, software 8dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 9dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * See the License for the specific language governing permissions and 11dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar * limitations under the License. 12dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar */ 13dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar 14fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.testapp; 15dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar 16ed6428586a939e00d9e66314d5cf1056ad48767eGeorge Mountimport android.databinding.DataBindingUtil; 17e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mountimport android.databinding.OnRebindCallback; 18ed6428586a939e00d9e66314d5cf1056ad48767eGeorge Mountimport android.databinding.testapp.databinding.BasicBindingBinding; 194eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mountimport android.databinding.testapp.databinding.NoExpressionsBinding; 204eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mountimport android.databinding.testapp.databinding.NoDataElementBinding; 214eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mountimport android.databinding.testapp.databinding.JustIdBinding; 22dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyarimport android.test.UiThreadTest; 23e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mountimport android.view.View; 24ed6428586a939e00d9e66314d5cf1056ad48767eGeorge Mountimport android.view.ViewGroup; 25fdfbbcd5ecf37d77a4b9ab1cefdebd68de71ca2bGeorge Mountimport android.widget.TextView; 26dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar 274c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mountpublic class BasicBindingTest extends BaseDataBinderTest<BasicBindingBinding> { 28dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar public BasicBindingTest() { 294c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount super(BasicBindingBinding.class); 30dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar } 31dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar 323f73e3149732132c02f5d19aab7b5da429794058Yigit Boyar @Override 333f73e3149732132c02f5d19aab7b5da429794058Yigit Boyar protected void setUp() throws Exception { 343f73e3149732132c02f5d19aab7b5da429794058Yigit Boyar super.setUp(); 353f73e3149732132c02f5d19aab7b5da429794058Yigit Boyar initBinder(); 363f73e3149732132c02f5d19aab7b5da429794058Yigit Boyar } 373f73e3149732132c02f5d19aab7b5da429794058Yigit Boyar 38dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar @UiThreadTest 390fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar public void testTextViewContentInInitialization() { 400fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar assertAB("X", "Y"); 410fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar } 420fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar 430fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar @UiThreadTest 440fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar public void testNullValuesInInitialization() { 450fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar assertAB(null, null); 460fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar } 470fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar 480fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar @UiThreadTest 490fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar public void testSecondIsNullInInitialization() { 500fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar assertAB(null, "y"); 510fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar } 520fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar 530fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar @UiThreadTest 540fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar public void testFirstIsNullInInitialization() { 550fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar assertAB("x", null); 560fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar } 570fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar 580fa158e8aa91297cc246e3bb9e5d1388dc2355ccYigit Boyar @UiThreadTest 59dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar public void testTextViewContent() { 60dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar assertAB("X", "Y"); 61dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar } 62dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar 63dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar @UiThreadTest 64dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar public void testNullValues() { 65dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar assertAB(null, null); 66dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar } 67dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar 68dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar @UiThreadTest 69dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar public void testSecondIsNull() { 70dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar assertAB(null, "y"); 71dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar } 72dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar 73dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar @UiThreadTest 74dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar public void testFirstIsNull() { 75dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar assertAB("x", null); 76dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar } 77dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar 78e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount public void testStopBinding() throws Throwable { 79e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount final NoRebind noRebind = new NoRebind(); 80e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount runTestOnUiThread(new Runnable() { 81e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount @Override 82e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount public void run() { 83e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount assertAB("X", "Y"); 84e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount mBinder.addOnRebindCallback(noRebind); 85e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 86e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount }); 87e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount mBinder.setA("Q"); 88e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount WaitForRun waitForRun = new WaitForRun(); 89e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount View root = mBinder.getRoot(); 90e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount root.postOnAnimation(waitForRun); 91e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount waitForRun.waitForRun(); 92e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount runTestOnUiThread(new Runnable() { 93e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount @Override 94e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount public void run() { 95e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount assertEquals(1, noRebind.rebindAttempts); 96e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount assertEquals(1, noRebind.rebindHalted); 97e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount assertEquals(0, noRebind.rebindWillEvaluate); 98e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount assertEquals("XY", mBinder.textView.getText().toString()); 99e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 100e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount }); 101e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount mBinder.removeOnRebindCallback(noRebind); 102e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount final AllowRebind allowRebind = new AllowRebind(); 103e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount mBinder.addOnRebindCallback(allowRebind); 104e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount mBinder.setB("R"); 105e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount root.postOnAnimation(waitForRun); 106e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount waitForRun.waitForRun(); 107e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount runTestOnUiThread(new Runnable() { 108e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount @Override 109e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount public void run() { 110e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount assertEquals(1, noRebind.rebindAttempts); 111e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount assertEquals(1, noRebind.rebindHalted); 112e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount assertEquals(0, noRebind.rebindWillEvaluate); 113e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount assertEquals(1, allowRebind.rebindAttempts); 114e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount assertEquals(0, allowRebind.rebindHalted); 115e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount assertEquals(1, allowRebind.rebindWillEvaluate); 116e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount assertEquals("QR", mBinder.textView.getText().toString()); 117e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 118e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount }); 119e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 120e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount 1214eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount @UiThreadTest 1224eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount public void testNoExpressionBinding() throws Throwable { 1234eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount NoExpressionsBinding binding = NoExpressionsBinding.inflate(getActivity().getLayoutInflater()); 1244eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount assertNotNull(binding); 1254eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount } 1264eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount 1274eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount @UiThreadTest 1284eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount public void testNoDataElement() throws Throwable { 1294eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount NoDataElementBinding binding = NoDataElementBinding.inflate(getActivity().getLayoutInflater()); 1304eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount assertNotNull(binding); 1314eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount } 1324eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount 1334eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount @UiThreadTest 1344eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount public void testJustIds() throws Throwable { 1354eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount JustIdBinding binding = JustIdBinding.inflate(getActivity().getLayoutInflater()); 1364eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount assertNotNull(binding); 1374eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount assertNotNull(binding.textView); 1384eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount } 1394eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount 1404eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount @UiThreadTest 1414eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount public void testNoBinding() throws Throwable { 1424eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount assertNull(DataBindingUtil.inflate(getActivity().getLayoutInflater(), R.layout.plain_layout, 1434eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount null, false)); 1444eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount } 1454eb96071f10f4c65aaade8c8b76dc0bdc350f671George Mount 146081ec223f1f2f801bd907ec6344b0c6aeee133e5George Mount @UiThreadTest 147081ec223f1f2f801bd907ec6344b0c6aeee133e5George Mount public void testInflation() throws Throwable { 148081ec223f1f2f801bd907ec6344b0c6aeee133e5George Mount ViewGroup viewGroup = (ViewGroup) mBinder.getRoot(); 149081ec223f1f2f801bd907ec6344b0c6aeee133e5George Mount BasicBindingBinding binding = 150081ec223f1f2f801bd907ec6344b0c6aeee133e5George Mount BasicBindingBinding.inflate(getActivity().getLayoutInflater(), viewGroup, true); 151081ec223f1f2f801bd907ec6344b0c6aeee133e5George Mount assertNotNull(binding); 152081ec223f1f2f801bd907ec6344b0c6aeee133e5George Mount assertNotNull(binding.textView); 153081ec223f1f2f801bd907ec6344b0c6aeee133e5George Mount assertNotSame(binding.textView, mBinder.textView); 154081ec223f1f2f801bd907ec6344b0c6aeee133e5George Mount } 155081ec223f1f2f801bd907ec6344b0c6aeee133e5George Mount 156fdfbbcd5ecf37d77a4b9ab1cefdebd68de71ca2bGeorge Mount @UiThreadTest 157fdfbbcd5ecf37d77a4b9ab1cefdebd68de71ca2bGeorge Mount public void testAndroidId() throws Throwable { 158fdfbbcd5ecf37d77a4b9ab1cefdebd68de71ca2bGeorge Mount JustIdBinding binding = JustIdBinding.inflate(getActivity().getLayoutInflater()); 159fdfbbcd5ecf37d77a4b9ab1cefdebd68de71ca2bGeorge Mount assertNotNull(binding); 160fdfbbcd5ecf37d77a4b9ab1cefdebd68de71ca2bGeorge Mount assertNotNull(binding.empty); 161fdfbbcd5ecf37d77a4b9ab1cefdebd68de71ca2bGeorge Mount assertTrue(binding.empty instanceof TextView); 162fdfbbcd5ecf37d77a4b9ab1cefdebd68de71ca2bGeorge Mount } 163fdfbbcd5ecf37d77a4b9ab1cefdebd68de71ca2bGeorge Mount 164dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar private void assertAB(String a, String b) { 165dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar mBinder.setA(a); 166dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar mBinder.setB(b); 167dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar rebindAndAssert(a + b); 168dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar } 169dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar 170dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar private void rebindAndAssert(String text) { 1714c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount mBinder.executePendingBindings(); 17234a18e6a231f3b64726bd93e7e097a0d5a75995dGeorge Mount assertEquals(text, mBinder.textView.getText().toString()); 173dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar } 174e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount 175e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount private class AllowRebind extends OnRebindCallback<BasicBindingBinding> { 176e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount public int rebindAttempts; 177e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount public int rebindHalted; 178e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount public int rebindWillEvaluate; 179e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount 180e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount @Override 181e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount public boolean onPreBind(BasicBindingBinding binding) { 182e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount rebindAttempts++; 183e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount return true; 184e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 185e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount 186e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount @Override 187e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount public void onCanceled(BasicBindingBinding binding) { 188e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount rebindHalted++; 189e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 190e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount 191e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount @Override 192e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount public void onBound(BasicBindingBinding binding) { 193e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount rebindWillEvaluate++; 194e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 195e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 196e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount 197e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount private class NoRebind extends AllowRebind { 198e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount @Override 199e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount public boolean onPreBind(BasicBindingBinding binding) { 200e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount super.onPreBind(binding); 201e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount return false; 202e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 203e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 204e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount 205e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount private static class WaitForRun implements Runnable { 206e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount 207e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount @Override 208e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount public void run() { 209e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount synchronized (this) { 210e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount this.notifyAll(); 211e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 212e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 213e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount 214e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount public void waitForRun() { 215e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount synchronized (this) { 216e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount try { 217e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount this.wait(1000); 218e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } catch (InterruptedException e) { 219e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount e.printStackTrace(); 220e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 221e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 222e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 223e725f0d81e1b07e88f819be9a82181eeeb680dbfGeorge Mount } 224dc69f49d687ec036947f26a9bf9025a305de0721Yigit Boyar} 225