package trikita.anvil;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.FrameLayout;
import org.junit.After;
import org.junit.Before;
import org.mockito.Mockito;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@TargetApi(Build.VERSION_CODES.KITKAT)
public class Utils {
Map<Class, Integer> createdViews = new HashMap<>();
Map<String, Integer> changedAttrs = new HashMap<>();
public Utils() {
Anvil.registerAttributeSetter(new Anvil.AttributeSetter() {
public boolean set(View v, String name, Object value, Object prevValue) {
changedAttrs.put(name, !changedAttrs.containsKey(name) ? 1 : (changedAttrs.get(name) + 1));
return false;
}
});
Anvil.registerViewFactory(new Anvil.ViewFactory() {
public View fromClass(Context c, Class<? extends View> v) {
createdViews.put(v, !createdViews.containsKey(v) ? 1 : (createdViews.get(v) + 1));
return null;
}
public View fromXml(ViewGroup parent, int xmlId) {
return null;
}
});
}
// public View fromId(View v, int viewId) {
// if (v instanceof MockLayout) {
// for (View child : ((MockLayout) v).children) {
// if (child.getId() == viewId) {
// return child;
// }
// }
// }
// return null;
// }
Anvil.Renderable empty = new Anvil.Renderable() {
public void view() {}
};
MockLayout container;
@Before
public void setUp() {
changedAttrs.clear();
createdViews.clear();
container = new MockLayout(getContext());
}
@After
public void tearDown() {
Anvil.unmount(container);
}
public Context getContext() {
return null;
}
public static class MockView extends View {
private int id = 0;
private Object tag;
private String text;
public MockView(Context c) { super(c); }
public void setId(int id) { this.id = id; }
public int getId() { return this.id; }
public void setText(String text) { this.text = text; }
public String getText() { return this.text; }
public Object getTag() { return tag; }
public void setTag(Object tag) { this.tag = tag; }
public String toString() { return "MockView$"+this.hashCode(); }
}
public static class MockLayout extends FrameLayout {
private List<View> children = new ArrayList<>();
private int id;
private Object tag;
private String text;
public MockLayout(Context c) {
super(c);
}
public int getChildCount() {
return children.size();
}
public View getChildAt(int index) {
return children.get(index);
}
public int indexOfChild(View v) {
return children.indexOf(v);
}
public void addView(View v, int index) {
this.children.add(index, v);
super.addView(v, index);
}
public void removeView(View v) {
this.children.remove(v);
super.removeView(v);
}
public void removeViews(int start, int count) {
if (count > 0) {
this.children.subList(start, start+count).clear();
}
super.removeViews(start, count);
}
public void setId(int id) { this.id = id; }
public int getId() { return this.id; }
public Object getTag() { return tag; }
public void setTag(Object tag) { this.tag = tag; }
public String getText() { return text; }
public void setText(String text) { this.text = text; }
public String toString() { return "MockLayout$"+this.hashCode(); }
}
}