// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.dq.helper;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.powermock.api.support.membermodification.MemberMatcher.method;
import static org.powermock.api.support.membermodification.MemberModifier.stub;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.junit.Rule;
import org.junit.Test;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.rule.PowerMockRule;
import org.talend.core.model.properties.Item;
import org.talend.core.model.properties.Property;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.dq.nodes.AnalysisRepNode;
import org.talend.dq.nodes.JrxmlTempleteRepNode;
import org.talend.repository.model.IRepositoryNode.ENodeType;
import org.talend.repository.model.RepositoryNode;
import orgomg.cwm.objectmodel.core.ModelElement;
/**
* DOC xqliu class global comment. Detailled comment
*/
@PrepareForTest({ RepositoryNodeHelper.class, ResourcesPlugin.class })
public class RepositoryNodeHelperTest {
@Rule
public PowerMockRule powerMockRule = new PowerMockRule();
@Test
public void testFindNearestSystemFolderNode() {
RepositoryNode node = mock(RepositoryNode.class);
RepositoryNode parent1 = mock(RepositoryNode.class);
when(parent1.getType()).thenReturn(ENodeType.SIMPLE_FOLDER);
when(node.getParent()).thenReturn(parent1);
RepositoryNode parent2 = mock(RepositoryNode.class);
when(parent2.getType()).thenReturn(ENodeType.SYSTEM_FOLDER);
when(parent1.getParent()).thenReturn(parent2);
RepositoryNode parent3 = mock(RepositoryNode.class);
when(parent3.getType()).thenReturn(ENodeType.SYSTEM_FOLDER);
when(parent2.getParent()).thenReturn(parent3);
RepositoryNode findNearestSysNode = RepositoryNodeHelper.findNearestSystemFolderNode(node);
assertTrue(findNearestSysNode.equals(parent2));
}
/**
* Test method for
* {@link org.talend.dq.helper.RepositoryNodeHelper#getIFile(org.talend.repository.model.IRepositoryNode)}.
*/
@Test
public void testGetIFile() {
// test non-ModelElement node, such as Jrxml File and Source File
JrxmlTempleteRepNode jrxmlNodeMock = mock(JrxmlTempleteRepNode.class);
ModelElement meNull = null; // Jrxml File and Source File don't have ModelElement
stub(method(RepositoryNodeHelper.class, "getModelElementFromRepositoryNode", JrxmlTempleteRepNode.class)) //$NON-NLS-1$
.toReturn(meNull);
PowerMockito.mockStatic(ResourcesPlugin.class);
IWorkspace workspaceMock = mock(IWorkspace.class);
when(ResourcesPlugin.getWorkspace()).thenReturn(workspaceMock);
IWorkspaceRoot workspaceRootMock = mock(IWorkspaceRoot.class);
when(workspaceMock.getRoot()).thenReturn(workspaceRootMock);
IRepositoryViewObject repoViewObjMock = mock(IRepositoryViewObject.class);
when(jrxmlNodeMock.getObject()).thenReturn(repoViewObjMock);
Property propertyMock = mock(Property.class);
when(repoViewObjMock.getProperty()).thenReturn(propertyMock);
Item itemMock = mock(Item.class);
when(propertyMock.getItem()).thenReturn(itemMock);
Resource resourceMock = mock(Resource.class);
when(itemMock.eResource()).thenReturn(resourceMock);
String propPathStr = "/Talend/Talend_All_trunk/runtime/TDQEE_runtime_50/PP/TDQ_Libraries/JRXML Template/column/b01_column_basic_0.1.properties"; //$NON-NLS-1$
URI uriReal = URI.createFileURI(propPathStr);
when(resourceMock.getURI()).thenReturn(uriReal);
IFile fileMock = mock(IFile.class);
when(workspaceRootMock.getFile((Path) any())).thenReturn(fileMock);
IFile iFile = RepositoryNodeHelper.getIFile(jrxmlNodeMock);
assertEquals(fileMock, iFile);
}
/**
* Test method for
* {@link org.talend.dq.helper.RepositoryNodeHelper#getIFile(org.talend.repository.model.IRepositoryNode)}.
*/
@Test
public void testGetIFile2() {
// test for ModelElement node, such as Analysis, Report, etc.
AnalysisRepNode analysisNodeMock = mock(AnalysisRepNode.class);
ModelElement meMock = mock(ModelElement.class);
stub(method(RepositoryNodeHelper.class, "getModelElementFromRepositoryNode", AnalysisRepNode.class)) //$NON-NLS-1$
.toReturn(meMock);
PowerMockito.mockStatic(ResourcesPlugin.class);
IWorkspace workspaceMock = mock(IWorkspace.class);
when(ResourcesPlugin.getWorkspace()).thenReturn(workspaceMock);
IWorkspaceRoot workspaceRootMock = mock(IWorkspaceRoot.class);
when(workspaceMock.getRoot()).thenReturn(workspaceRootMock);
Resource resourceMock = mock(Resource.class);
when(meMock.eResource()).thenReturn(resourceMock);
String itemPathStr = "/Talend/Talend_All_trunk/runtime/TDQEE_runtime/P0518/TDQ_Data Profiling/Analyses/a1_0.1.ana";
URI uri = URI.createFileURI(itemPathStr);
when(resourceMock.getURI()).thenReturn(uri);
IFile fileMock = mock(IFile.class);
when(workspaceRootMock.getFile((Path) any())).thenReturn(fileMock);
IFile iFile = RepositoryNodeHelper.getIFile(analysisNodeMock);
assertEquals(fileMock, iFile);
}
}