/stat/src/test/java/com/google/sitebricks/stat/StatReadersTest.java

http://github.com/dhanji/sitebricks · Java · 143 lines · 89 code · 28 blank · 26 comment · 0 complexity · 7dbd23780ad12e09ade492accc142d00 MD5 · raw file

  1. /**
  2. * Copyright (C) 2011 Google Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. *
  16. */
  17. package com.google.sitebricks.stat;
  18. import com.google.common.collect.Lists;
  19. import org.testng.annotations.BeforeMethod;
  20. import org.testng.annotations.Test;
  21. import java.lang.reflect.Field;
  22. import java.lang.reflect.Method;
  23. import java.util.List;
  24. import static org.testng.Assert.assertEquals;
  25. /**
  26. * This class includes tests for the logic within {@link StatReaders}.
  27. *
  28. * @author ffaber@gmail.com (Fred Faber)
  29. */
  30. public class StatReadersTest {
  31. static class TestClass {
  32. static Integer staticField;
  33. static Integer getStaticFieldValue() {
  34. return staticField;
  35. }
  36. Integer instanceField;
  37. Integer getInstanceFieldValue() {
  38. return instanceField;
  39. }
  40. }
  41. static final Integer STATIC_FIELD_STARTING_VALUE = 1;
  42. static final Integer INSTANCE_FIELD_STARTING_VALUE = 2;
  43. Field staticField;
  44. Method staticMethod;
  45. Field instanceField;
  46. Method instanceMethod;
  47. TestClass testClass;
  48. @BeforeMethod
  49. public void setUp() throws Exception {
  50. testClass = new TestClass();
  51. TestClass.staticField = STATIC_FIELD_STARTING_VALUE;
  52. testClass.instanceField = INSTANCE_FIELD_STARTING_VALUE;
  53. staticField = TestClass.class.getDeclaredField("staticField");
  54. staticMethod = TestClass.class.getDeclaredMethod("getStaticFieldValue");
  55. instanceField = TestClass.class.getDeclaredField("instanceField");
  56. instanceMethod = TestClass.class.getDeclaredMethod("getInstanceFieldValue");
  57. }
  58. @Test
  59. public void testInstanceFieldReader() {
  60. StatReader statReader = StatReaders.forField(instanceField, testClass);
  61. assertEquals(testClass.instanceField, statReader.readStat());
  62. // Mutate the field and confirm that its updated value is read.
  63. testClass.instanceField++;
  64. assertEquals(testClass.instanceField, statReader.readStat());
  65. }
  66. @Test public void testStaticFieldReader() {
  67. StatReader statReader = StatReaders.forStaticField(staticField);
  68. assertEquals(TestClass.staticField, statReader.readStat());
  69. // Mutate the field and confirm that its updated value is read.
  70. TestClass.staticField++;
  71. assertEquals(TestClass.staticField, statReader.readStat());
  72. }
  73. @Test public void testInstanceMethodReader() {
  74. StatReader statReader = StatReaders.forMethod(instanceMethod, testClass);
  75. assertEquals(testClass.getInstanceFieldValue(), statReader.readStat());
  76. // Mutate the field and confirm that its updated value is read.
  77. testClass.instanceField++;
  78. assertEquals(testClass.getInstanceFieldValue(), statReader.readStat());
  79. }
  80. @Test public void testStaticMethodReader() {
  81. StatReader statReader = StatReaders.forStaticMethod(staticMethod);
  82. assertEquals(TestClass.getStaticFieldValue(), statReader.readStat());
  83. // Mutate the field and confirm that its updated value is read.
  84. TestClass.staticField++;
  85. assertEquals(TestClass.getStaticFieldValue(), statReader.readStat());
  86. }
  87. @Test public void testInstanceMemberReader_forField() {
  88. StatReader memberReader = StatReaders.forMember(instanceField, testClass);
  89. StatReader fieldReader = StatReaders.forField(instanceField, testClass);
  90. assertEquals(memberReader, fieldReader);
  91. }
  92. @Test public void testInstanceMemberReader_forMethod() {
  93. StatReader memberReader = StatReaders.forMember(instanceMethod, testClass);
  94. StatReader methodReader = StatReaders.forMethod(instanceMethod, testClass);
  95. assertEquals(memberReader, methodReader);
  96. }
  97. @Test public void testStaticMemberReader_forField() {
  98. StatReader memberReader = StatReaders.forStaticMember(staticField);
  99. StatReader fieldReader = StatReaders.forStaticField(staticField);
  100. assertEquals(memberReader, fieldReader);
  101. }
  102. @Test public void testStaticMemberReader_forMember() {
  103. StatReader memberReader = StatReaders.forStaticMember(staticMethod);
  104. StatReader methodReader = StatReaders.forStaticMethod(staticMethod);
  105. assertEquals(memberReader, methodReader );
  106. }
  107. @Test public void testObjectReader() {
  108. List<Integer> statList = Lists.newArrayList(1, 2);
  109. StatReader statReader = StatReaders.forObject(statList);
  110. assertEquals(statList, statReader.readStat());
  111. // If we add a value, we expect it to be reflected in the stat that is read
  112. statList.add(3);
  113. assertEquals(statList, statReader.readStat());
  114. }
  115. }