@Test
  public void testWrongType() throws Exception {
    final int[] intArray = {1, 2, 3, 4};
    final Collection<? extends IdPAttributeValue<?>> values =
        Arrays.asList(
            new IdPAttributeValue<Object>() {
              public Object getValue() {
                return intArray;
              }

              public String getDisplayValue() {
                return intArray.toString();
              }
            },
            saml2NameIdFor(OTHERID));

    final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
    inputAttribute.setValues(values);
    prc.getSubcontext(RelyingPartyContext.class)
        .getSubcontext(AttributeContext.class, true)
        .setIdPAttributes(Collections.singleton(inputAttribute));

    generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
    generator.initialize();

    Assert.assertNull(generator.generate(prc, generator.getFormat()));
  }
  @Test
  public void testWrongFormat() throws Exception {
    final Collection<? extends IdPAttributeValue<?>> values =
        Collections.singletonList(saml1NameIdFor(NAME_1));
    final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
    inputAttribute.setValues(values);
    prc.getSubcontext(RelyingPartyContext.class)
        .getSubcontext(AttributeContext.class, true)
        .setIdPAttributes(Collections.singleton(inputAttribute));

    generator.setFormat(NameIdentifier.EMAIL);
    generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
    generator.initialize();
    Assert.assertNull(generator.generate(prc, generator.getFormat()));
  }
  /** {@inheritDoc} */
  @Override
  @Nullable
  protected IdPAttribute doAttributeDefinitionResolve(
      @Nonnull final AttributeResolutionContext resolutionContext,
      @Nonnull final AttributeResolverWorkContext workContext)
      throws ResolutionException {

    ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
    ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
    List<? extends IdPAttributeValue<?>> inputValues;
    List<? extends IdPAttributeValue<?>> outputValues = null;
    final IdPAttribute result = new IdPAttribute(getId());

    inputValues =
        PluginDependencySupport.getMergedAttributeValues(workContext, getDependencies(), getId());

    if (null != inputValues && !inputValues.isEmpty()) {
      if (1 == inputValues.size()) {
        final IdPAttributeValue<?> val =
            encodeOneValue(inputValues.iterator().next(), resolutionContext);
        if (null != val) {
          outputValues = Collections.singletonList(val);
        }
      } else {
        // TODO(rdw) Fix typing
        // Intermediate to solve typing issues.
        final List<XMLObjectAttributeValue> xmlVals = new ArrayList<>(inputValues.size());
        for (final IdPAttributeValue<?> theValue : inputValues) {
          final XMLObjectAttributeValue val = encodeOneValue(theValue, resolutionContext);
          if (null != val) {
            xmlVals.add(val);
          }
        }
        if (0 == xmlVals.size()) {
          log.warn("{} No appropriate values", getLogPrefix());
          return null;
        }
        outputValues = xmlVals;
      }
    }
    result.setValues(outputValues);

    return result;
  }
  /**
   * Set static values returned by this connector.
   *
   * @param newValues static values returned by this connector
   */
  public void setValues(@Nullable @NullableElements Collection<IdPAttribute> newValues) {
    ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
    ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);

    if (null == newValues) {
      attributes = null;
      return;
    }

    Map<String, IdPAttribute> map = new HashMap<>(newValues.size());
    for (IdPAttribute attr : newValues) {
      if (null == attr) {
        continue;
      }
      map.put(attr.getId(), attr);
    }

    attributes = ImmutableMap.copyOf(map);
  }
  @Test
  public void testNameIdentifierValued() throws Exception {
    final Collection<? extends IdPAttributeValue<?>> values =
        Collections.singletonList(saml1NameIdFor(NAME_1));
    final IdPAttribute inputAttribute = new IdPAttribute(ATTR_NAME);
    inputAttribute.setValues(values);
    prc.getSubcontext(RelyingPartyContext.class)
        .getSubcontext(AttributeContext.class, true)
        .setIdPAttributes(Collections.singleton(inputAttribute));

    generator.setAttributeSourceIds(Collections.singletonList(ATTR_NAME));
    generator.initialize();
    final NameIdentifier outputNameId = generator.generate(prc, generator.getFormat());

    Assert.assertNotNull(outputNameId);
    Assert.assertEquals(outputNameId.getValue(), NAME_1);
    Assert.assertEquals(outputNameId.getFormat(), NameIdentifier.X509_SUBJECT);
    Assert.assertEquals(outputNameId.getNameQualifier(), QUALIFIER);
  }