/*********************************************************************
* Copyright (c) 2020 The University of York.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipse.epsilon.picto.test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import org.eclipse.epsilon.picto.Layer;
import org.eclipse.epsilon.picto.PictoView;
import org.eclipse.epsilon.picto.ViewContent;
import org.eclipse.epsilon.picto.ViewTree;
import org.junit.Test;

public class SocialNetworkTests extends PictoTests {
	
	@Test
	public void testSocialNetwork() throws Exception {
		
		PictoView pictoView = createPictoView();
		
		ViewTree viewTree = getViewTree("ecore/socialnetwork.picto");
		
		ViewTree modelViewTree = viewTree.getChildren().get(0);
		assertEquals("Model", modelViewTree.getName());
		
		ViewTree classesViewTree = modelViewTree.getChildren().get(1);
		assertEquals("Classes", classesViewTree.getName());
		
		ViewTree socialNetworkViewTree = classesViewTree.getChildren().get(1);
		assertEquals("SocialNetwork", socialNetworkViewTree.getName());
		
		ViewContent dotContent = socialNetworkViewTree.getContent();
		assertEquals("graphviz-dot", dotContent.getFormat());
		assertTrue(dotContent.getText().contains("digraph"));
		// By default the referenceLabels layer is turned on
		assertTrue(dotContent.getText().contains("people[*]"));
		
		// Turn the referenceLabels layer off
		Layer referenceLabelsLayer = socialNetworkViewTree.getContent().getLayers().stream().filter(l -> l.getId().equals("referenceLabels")).findFirst().orElse(null);
		referenceLabelsLayer.setActive(false);
		socialNetworkViewTree.clearCache();
		// Check that there's no people[*] label anywhere in the generated dot
		assertFalse(socialNetworkViewTree.getContent().getText().contains("people[*]"));
		
		ViewContent svgContent = dotContent.getNext(pictoView);
		assertEquals("svg", svgContent.getFormat());
		assertTrue(svgContent.getText().contains("svg"));
		
		ViewContent htmlContent = svgContent.getNext(pictoView);
		assertEquals("html", htmlContent.getFormat());
		assertTrue(htmlContent.getText().contains("html"));
		
		ViewContent htmlWithZoomContent = htmlContent.getNext(pictoView);
		assertEquals("html", htmlWithZoomContent.getFormat());
		assertTrue(htmlWithZoomContent.getText().contains("picto-zoom"));
		assertTrue(htmlWithZoomContent.getText().contains("people[*]"));
		
		assertNull(htmlWithZoomContent.getNext(pictoView));
		
	}
	
}
