/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * *******************************************************************************/ package com.liferay.mobile.sdk.core.tests; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import com.liferay.ide.core.tests.BaseTests; import com.liferay.ide.core.util.CoreUtil; import com.liferay.mobile.sdk.core.MobileAPI; import com.liferay.mobile.sdk.core.MobileSDKBuilder; import com.liferay.mobile.sdk.core.MobileSDKCore; import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import org.apache.commons.io.FileUtils; import org.eclipse.core.runtime.NullProgressMonitor; import org.junit.Test; /** * @author Gregory Amerson */ public class MobileSDKCoreTests extends BaseTests { private static final String CONTEXT = "calendar-portlet"; private static final String PACKAGE = "foo.bar"; private static final String PASSWORD = "test"; private static final String SERVER = "http://localhost:8080/"; private static final String USERNAME = "test@liferay.com"; private Collection<File> build( String server, String contextName, String packageName ) throws IOException { return build( server, contextName, null, packageName ); } private Collection<File> build( String server, String contextName, String filter, String packageName ) throws IOException { final File newTempDir = MobileSDKCore.newTempDir(); MobileSDKBuilder.build( server, contextName, packageName, filter, newTempDir.getCanonicalPath(), new NullProgressMonitor() ); return FileUtils.listFiles( newTempDir, null, true ); } private void checkJar( File jar, boolean src ) throws Exception { assertTrue( jar.exists() ); final ZipFile zipFile = new ZipFile( jar ); final ZipEntry manifest = zipFile.getEntry( "META-INF/MANIFEST.MF" ); assertNotNull( manifest ); final String manifestContents = CoreUtil.readStreamToString( zipFile.getInputStream( manifest ) ); assertTrue( manifestContents.startsWith( "Manifest-Version: 1.0" ) ); boolean valid = false; Enumeration<? extends ZipEntry> entries = zipFile.entries(); while( entries.hasMoreElements() ) { final String entryName = entries.nextElement().getName(); if( entryName.startsWith( PACKAGE.split( "\\." )[0] ) && entryName.endsWith( src ? ".java" : ".class" ) ) { valid = true; break; } } zipFile.close(); assertTrue( valid ); } @Test public void testMobileSDKDiscovery() throws Exception { final MobileAPI[] apis = MobileSDKCore.discoverAPIs( SERVER, USERNAME, PASSWORD ); assertNotNull( apis ); assertTrue( apis.length > 1 ); // assertEquals( "Liferay core", apis[0].context ); boolean foundCalendar = false; for( final MobileAPI api : apis ) { if( api.context.equals( CONTEXT ) ) { foundCalendar = true; } } assertTrue( foundCalendar ); } @Test public void testMobileSDKBuilderBuild() throws Exception { final Collection<File> files = build( SERVER, CONTEXT, PACKAGE ); assertNotNull( files ); assertTrue( files.size() == 4 ); } @Test public void testMobileSDKBuilderBuildFilter() throws Exception { final Collection<File> files = build( SERVER, CONTEXT, "calendarbooking", PACKAGE ); assertTrue( files.size() == 1 ); } @Test public void testMobileSDKBuilderBuildJars() throws Exception { final Map<String, String[]> buildSpec = new HashMap<String, String[]>(); buildSpec.put( "calendar-portlet", new String[] { "calendar" } ); final File[] customJars = MobileSDKBuilder.buildJars( SERVER, PACKAGE, buildSpec, new NullProgressMonitor() ); checkJar( customJars[0], false ); checkJar( customJars[1], true ); } @Test public void mobileSDKBuilderBuildSingleAPI() throws Exception { final Map<String, String[]> buildSpec = new HashMap<String, String[]>(); buildSpec.put( "calendar-portlet", new String[] { "calendar" } ); final File[] customJars = MobileSDKBuilder.buildJars( SERVER, PACKAGE, buildSpec, new NullProgressMonitor() ); checkJarPaths( customJars[0], new String[] { "foo/bar/v62/calendar" } ); checkJarPaths( customJars[1], new String[] { "foo/bar/v62/calendar" } ); } @Test public void mobileSDKBuilderBuildMultiAPI() throws Exception { final Map<String, String[]> buildSpec = new HashMap<String, String[]>(); buildSpec.put( "calendar-portlet", new String[] { "calendar", "calendarbooking" } ); final File[] customJars = MobileSDKBuilder.buildJars( SERVER, PACKAGE, buildSpec, new NullProgressMonitor() ); checkJarPaths( customJars[0], new String[] { "foo/bar/v62/calendar", "foo/bar/v62/calendarbooking" } ); checkJarPaths( customJars[1], new String[] { "foo/bar/v62/calendar", "foo/bar/v62/calendarbooking" } ); } @Test public void mobileSDKBuilderMultiContextMultiAPI() throws Exception { final Map<String, String[]> buildSpec = new HashMap<String, String[]>(); buildSpec.put( "calendar-portlet", new String[] { "calendar", "calendarbooking" } ); buildSpec.put( "opensocial-portlet", new String[] { "gadget" } ); final File[] customJars = MobileSDKBuilder.buildJars( SERVER, PACKAGE, buildSpec, new NullProgressMonitor() ); checkJarPaths( customJars[0], new String[] { "foo/bar/v62/calendar", "foo/bar/v62/calendarbooking", "foo/bar/v62/gadget" } ); checkJarPaths( customJars[1], new String[] { "foo/bar/v62/calendar", "foo/bar/v62/calendarbooking", "foo/bar/v62/gadget" } ); } private void checkJarPaths( File jar, String[] paths ) throws Exception { assertTrue( jar.exists() ); final ZipFile jarFile = new ZipFile( jar ); for( String path : paths ) { ZipEntry entry = jarFile.getEntry( path ); assertNotNull( entry ); } jarFile.close(); } }