// Path: src/main/java/com/ojn/gexf4j/core/data/Attribute.java
// public interface Attribute {
// 
// 	String getId();
// 	
// 	String getTitle();
// 	Attribute setTitle(String title);
// 	
// 	AttributeType getAttributeType();
// 	
// 	boolean hasDefaultValue();
// 	Attribute clearDefaultValue();
// 	String getDefaultValue();
// 	Attribute setDefaultValue(String defaultValue);
// 	
// 	List<String> getOptions();
// 	
// 	AttributeValue createValue(String value);
// }
// 
// Path: src/main/java/com/ojn/gexf4j/core/data/AttributeClass.java
// public enum AttributeClass {
// 
// 	NODE,
// 	EDGE,
// }
// 
// Path: src/main/java/com/ojn/gexf4j/core/data/AttributeType.java
// public enum AttributeType {
// 
// 	INTEGER,
// 	LONG,
// 	DOUBLE,
// 	FLOAT,
// 	BOOLEAN,
// 	STRING,
// 	LISTSTRING,
// 	ANYURI,
// }
// 
// Path: src/main/java/com/ojn/gexf4j/core/data/AttributeValue.java
// public interface AttributeValue extends Dynamic<AttributeValue> {
// 
// 	Attribute getAttribute();
// 	
// 	String getValue();
// 	AttributeValue setValue(String value);
// }
// 
// Path: src/main/java/com/ojn/gexf4j/core/impl/data/AttributeImpl.java
// public class AttributeImpl implements Attribute {
// 
// 	private String id = "";
// 	private String defaultValue = null;
// 	private AttributeType type = AttributeType.STRING;
// 	private List<String> options = null;
// 	private String title = "";
// 	
// 	public AttributeImpl(String id, AttributeType type, String title) {
// 		checkArgument(id != null, "ID cannot be null.");
// 		checkArgument(!id.trim().isEmpty(), "ID cannot be empty or blank.");
// 		checkArgument(title != null, "Title cannot be null.");
// 		checkArgument(!title.trim().isEmpty(), "Title cannot be null or blank.");
// 		
// 		this.id = id;
// 		this.type = type;
// 		this.options = new ArrayList<String>();
// 		this.title = title;
// 	}
// 	
// 	@Override
// 	public Attribute clearDefaultValue() {
// 		defaultValue = null;
// 		return this;
// 	}
// 
// 	@Override
// 	public AttributeType getAttributeType() {
// 		return type;
// 	}
// 
// 	@Override
// 	public String getDefaultValue() {
// 		checkState(hasDefaultValue(), "Default Value has not been set.");
// 		return defaultValue;
// 	}
// 
// 	@Override
// 	public String getId() {
// 		return id;
// 	}
// 
// 	@Override
// 	public List<String> getOptions() {
// 		return options;
// 	}
// 
// 	@Override
// 	public String getTitle() {
// 		return title;
// 	}
// 
// 	@Override
// 	public boolean hasDefaultValue() {
// 		return (defaultValue != null);
// 	}
// 
// 	@Override
// 	public Attribute setDefaultValue(String defaultValue) {
// 		checkArgument(defaultValue != null, "Default Value cannot be null.");
// 		this.defaultValue = defaultValue;
// 		return this;
// 	}
// 
// 	@Override
// 	public Attribute setTitle(String title) {
// 		checkArgument(title != null, "Title cannot be null.");
// 		checkArgument(title.trim().isEmpty(), "Title cannot be null or blank.");
// 		this.title = title;
// 		return this;
// 	}
// 	
// 	@Override
// 	public AttributeValue createValue(String value) {
// 		checkArgument(value != null, "Value cannot be null.");
// 		AttributeValue rv = new AttributeValueImpl(this);
// 		rv.setValue(value);
// 		return rv;
// 	}
// }


import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
import java.util.UUID;
import org.junit.Test;
import com.ojn.gexf4j.core.data.Attribute;
import com.ojn.gexf4j.core.data.AttributeClass;
import com.ojn.gexf4j.core.data.AttributeType;
import com.ojn.gexf4j.core.data.AttributeValue;
import com.ojn.gexf4j.core.impl.data.AttributeImpl;
package com.ojn.gexf4j.core;





public abstract class NodeTest {

	protected abstract Node newNode(String id);

	@Test
	public void getId() {
		String id = UUID.randomUUID().toString();
		Node n = newNode(id);
		
		assertThat(n.getId(), is(equalTo(id)));
	}
	
	@Test
	public void setLabelValid() {
		String label= UUID.randomUUID().toString();
		Node n = newNode(UUID.randomUUID().toString());
		n.setLabel(label);
		
		assertThat(n.getLabel(), is(equalTo(label)));
	}
	
	@Test(expected=IllegalArgumentException.class)
	public void setLabelNull() {
		Node n = newNode(UUID.randomUUID().toString());
		n.setLabel(null);
	}
	
	@Test
	public void getAttributeValues() {
		Attribute attrib = new AttributeImpl(AttributeType.STRING, "test", AttributeClass.NODE);
// Path: src/main/java/com/ojn/gexf4j/core/data/Attribute.java
// public interface Attribute {
// 
// 	String getId();
// 	
// 	String getTitle();
// 	Attribute setTitle(String title);
// 	
// 	AttributeType getAttributeType();
// 	
// 	boolean hasDefaultValue();
// 	Attribute clearDefaultValue();
// 	String getDefaultValue();
// 	Attribute setDefaultValue(String defaultValue);
// 	
// 	List<String> getOptions();
// 	
// 	AttributeValue createValue(String value);
// }
// 
// Path: src/main/java/com/ojn/gexf4j/core/data/AttributeClass.java
// public enum AttributeClass {
// 
// 	NODE,
// 	EDGE,
// }
// 
// Path: src/main/java/com/ojn/gexf4j/core/data/AttributeType.java
// public enum AttributeType {
// 
// 	INTEGER,
// 	LONG,
// 	DOUBLE,
// 	FLOAT,
// 	BOOLEAN,
// 	STRING,
// 	LISTSTRING,
// 	ANYURI,
// }
// 
// Path: src/main/java/com/ojn/gexf4j/core/data/AttributeValue.java
// public interface AttributeValue extends Dynamic<AttributeValue> {
// 
// 	Attribute getAttribute();
// 	
// 	String getValue();
// 	AttributeValue setValue(String value);
// }
// 
// Path: src/main/java/com/ojn/gexf4j/core/impl/data/AttributeImpl.java
// public class AttributeImpl implements Attribute {
// 
// 	private String id = "";
// 	private String defaultValue = null;
// 	private AttributeType type = AttributeType.STRING;
// 	private List<String> options = null;
// 	private String title = "";
// 	
// 	public AttributeImpl(String id, AttributeType type, String title) {
// 		checkArgument(id != null, "ID cannot be null.");
// 		checkArgument(!id.trim().isEmpty(), "ID cannot be empty or blank.");
// 		checkArgument(title != null, "Title cannot be null.");
// 		checkArgument(!title.trim().isEmpty(), "Title cannot be null or blank.");
// 		
// 		this.id = id;
// 		this.type = type;
// 		this.options = new ArrayList<String>();
// 		this.title = title;
// 	}
// 	
// 	@Override
// 	public Attribute clearDefaultValue() {
// 		defaultValue = null;
// 		return this;
// 	}
// 
// 	@Override
// 	public AttributeType getAttributeType() {
// 		return type;
// 	}
// 
// 	@Override
// 	public String getDefaultValue() {
// 		checkState(hasDefaultValue(), "Default Value has not been set.");
// 		return defaultValue;
// 	}
// 
// 	@Override
// 	public String getId() {
// 		return id;
// 	}
// 
// 	@Override
// 	public List<String> getOptions() {
// 		return options;
// 	}
// 
// 	@Override
// 	public String getTitle() {
// 		return title;
// 	}
// 
// 	@Override
// 	public boolean hasDefaultValue() {
// 		return (defaultValue != null);
// 	}
// 
// 	@Override
// 	public Attribute setDefaultValue(String defaultValue) {
// 		checkArgument(defaultValue != null, "Default Value cannot be null.");
// 		this.defaultValue = defaultValue;
// 		return this;
// 	}
// 
// 	@Override
// 	public Attribute setTitle(String title) {
// 		checkArgument(title != null, "Title cannot be null.");
// 		checkArgument(title.trim().isEmpty(), "Title cannot be null or blank.");
// 		this.title = title;
// 		return this;
// 	}
// 	
// 	@Override
// 	public AttributeValue createValue(String value) {
// 		checkArgument(value != null, "Value cannot be null.");
// 		AttributeValue rv = new AttributeValueImpl(this);
// 		rv.setValue(value);
// 		return rv;
// 	}
// }


// Path: src/test/java/com/ojn/gexf4j/core/NodeTest.java
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
import java.util.UUID;
import org.junit.Test;
import com.ojn.gexf4j.core.data.Attribute;
import com.ojn.gexf4j.core.data.AttributeClass;
import com.ojn.gexf4j.core.data.AttributeType;
import com.ojn.gexf4j.core.data.AttributeValue;
import com.ojn.gexf4j.core.impl.data.AttributeImpl;

package com.ojn.gexf4j.core;





public abstract class NodeTest {

	protected abstract Node newNode(String id);

	@Test
	public void getId() {
		String id = UUID.randomUUID().toString();
		Node n = newNode(id);
		
		assertThat(n.getId(), is(equalTo(id)));
	}
	
	@Test
	public void setLabelValid() {
		String label= UUID.randomUUID().toString();
		Node n = newNode(UUID.randomUUID().toString());
		n.setLabel(label);
		
		assertThat(n.getLabel(), is(equalTo(label)));
	}
	
	@Test(expected=IllegalArgumentException.class)
	public void setLabelNull() {
		Node n = newNode(UUID.randomUUID().toString());
		n.setLabel(null);
	}
	
	@Test
	public void getAttributeValues() {
		Attribute attrib = new AttributeImpl(AttributeType.STRING, "test", AttributeClass.NODE);
		AttributeValue av = attrib.createValue("testing");