@Test
public void testXAttrFeature() throws Exception {

  List<XAttr> xAttrs = new ArrayList<>();
  XAttrFeature feature = new XAttrFeature(xAttrs);
  // no XAttrs in the feature
  assertTrue(feature.getXAttrs().isEmpty());
  // one XAttr in the feature
  XAttr a1 = XAttrHelper.buildXAttr(name1, value1);
  xAttrs.add(a1);
  feature = new XAttrFeature(xAttrs);
  XAttr r1 = feature.getXAttr(name1);
  assertTrue(a1.equals(r1));
  assertEquals(feature.getXAttrs().size(), 1);
  // more XAttrs in the feature
  XAttr a2 = XAttrHelper.buildXAttr(name2, value2);
  XAttr a3 = XAttrHelper.buildXAttr(name3);
  XAttr a4 = XAttrHelper.buildXAttr(name4, value4);
  XAttr a5 = XAttrHelper.buildXAttr(name5, value5);
  XAttr a6 = XAttrHelper.buildXAttr(name6, value6);
  XAttr a7 = XAttrHelper.buildXAttr(name7, value7);
  XAttr bigXattr = XAttrHelper.buildXAttr(bigXattrKey, bigXattrValue);
  xAttrs.add(a2);
  xAttrs.add(a3);
  xAttrs.add(a4);
  xAttrs.add(a5);
  xAttrs.add(a6);
  xAttrs.add(a7);
  xAttrs.add(bigXattr);
  feature = new XAttrFeature(xAttrs);
  XAttr r2 = feature.getXAttr(name2);
  assertTrue(a2.equals(r2));
  XAttr r3 = feature.getXAttr(name3);
  assertTrue(a3.equals(r3));
  XAttr r4 = feature.getXAttr(name4);
  assertTrue(a4.equals(r4));
  XAttr r5 = feature.getXAttr(name5);
  assertTrue(a5.equals(r5));
  XAttr r6 = feature.getXAttr(name6);
  assertTrue(a6.equals(r6));
  XAttr r7 = feature.getXAttr(name7);
  assertTrue(a7.equals(r7));
  XAttr rBigXattr = feature.getXAttr(bigXattrKey);
  assertTrue(bigXattr.equals(rBigXattr));
  List<XAttr> rs = feature.getXAttrs();
  assertEquals(rs.size(), xAttrs.size());
  for (int i = 0; i < rs.size(); i++) {
    assertTrue(xAttrs.contains(rs.get(i)));
  }
  // get non-exist XAttr in the feature
  XAttr r8 = feature.getXAttr(name8);
  assertTrue(r8 == null);
}