blob: a3609839b76ef480a421bcf01cb3c2a6aea5df1d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.web.clientproject.cordova;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URI;
import java.nio.channels.SelectionKey;
import org.junit.*;
import static org.junit.Assert.*;
import org.netbeans.junit.MockServices;
import org.netbeans.junit.NbTestCase;
import org.netbeans.modules.cordova.platforms.spi.Device;
import org.netbeans.modules.cordova.platforms.spi.MobilePlatform;
import org.netbeans.modules.cordova.platforms.api.PlatformManager;
import org.netbeans.modules.cordova.platforms.spi.SDK;
import org.netbeans.modules.netserver.api.ProtocolDraft;
import org.netbeans.modules.netserver.websocket.WebSocketClientImpl;
import org.netbeans.modules.netserver.api.WebSocketReadHandler;
import org.openide.modules.InstalledFileLocator;
/**
*
* @author beci
*/
public class AndroidPlatformTest extends NbTestCase {
public AndroidPlatformTest(String name) {
super(name);
}
@Override
protected void setUp() throws Exception {
super.setUp();
MockServices.setServices(IFL.class);
}
public static final class IFL extends InstalledFileLocator {
public IFL() {
}
@Override
public File locate(String relativePath, String codeNameBase, boolean localized) {
if (relativePath.equals("ant/nblib/bridge.jar")) {
String path = System.getProperty("test.bridge.jar");
assertNotNull("must set test.bridge.jar", path);
return new File(path);
} else if (relativePath.equals("ant")) {
String path = System.getProperty("test.ant.home");
assertNotNull("must set test.ant.home", path);
return new File(path);
} else if (relativePath.startsWith("ant/")) {
String path = System.getProperty("test.ant.home");
assertNotNull("must set test.ant.home", path);
return new File(path, relativePath.substring(4).replace('/', File.separatorChar));
} else {
return null;
}
}
}
/**
* Test of createProject method, of class AndroidPlatform.
*/
@Test
public void testGetAvds() throws Exception {
MobilePlatform instance = org.netbeans.modules.cordova.platforms.api.PlatformManager.getPlatform(PlatformManager.ANDROID_TYPE);
instance.setSdkLocation("/Users/beci/android-sdk-macosx");
for (Device avd: instance.getVirtualDevices()) {
System.out.println(avd);
}
}
@Test
public void testGetDevices() throws Exception {
MobilePlatform instance = org.netbeans.modules.cordova.platforms.api.PlatformManager.getPlatform(PlatformManager.ANDROID_TYPE);
instance.setSdkLocation("/Users/beci/android-sdk-macosx");
for (Device avd: instance.getVirtualDevices()) {
System.out.println(avd);
}
}
@Test
public void testGetTargets() throws Exception {
MobilePlatform instance = org.netbeans.modules.cordova.platforms.api.PlatformManager.getPlatform(PlatformManager.ANDROID_TYPE);
instance.setSdkLocation("/Users/beci/android-sdk-macosx");
for (SDK target: instance.getSDKs()) {
System.out.println(target);
}
}
@Test
public void testEnableDebugging() throws Exception {
File f = File.createTempFile("tmp", "tmp");
FileWriter fileWriter = new FileWriter(f);
BufferedWriter buf = new BufferedWriter(fileWriter);
buf.append("attach " + getPid());
buf.newLine();
buf.append("p (void *)[WebView _enableRemoteInspector]");
buf.newLine();
buf.append("detach");
buf.newLine();
buf.append("quit");
buf.newLine();
buf.close();
System.out.println(f.getPath());
final Process p = Runtime.getRuntime().exec("gdb --command=" + f.getPath());
}
static class SyncPipe implements Runnable
{
public SyncPipe(InputStream istrm, OutputStream ostrm) {
istrm_ = istrm;
ostrm_ = ostrm;
}
public void run() {
try
{
final byte[] buffer = new byte[1024];
for (int length = 0; (length = istrm_.read(buffer)) != -1; )
{
ostrm_.write(buffer, 0, length);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private static OutputStream ostrm_;
private static InputStream istrm_;
}
private int getPid() throws IOException {
BufferedReader r = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("ps x").getInputStream()));
String line;
while (r.ready() && ((line = r.readLine()) != null)) {
System.out.println(line);
if (line.contains("iPhone Simulator") && line.contains("ClientSide")) {
final String trim = line.substring(0, 6).trim();
System.out.println(trim);
return Integer.parseInt(trim);
}
}
return -1;
}
/**
* Test of createProject method, of class AndroidPlatform.
*/
@Test
public void testListSdks() throws Exception {
MobilePlatform instance = org.netbeans.modules.cordova.platforms.api.PlatformManager.getPlatform(PlatformManager.IOS_TYPE);
if (instance != null) {
for (SDK sdks : instance.getSDKs()) {
System.out.println(sdks);
}
}
}
/**
* Test of createProject method, of class AndroidPlatform.
*/
@Test
public void testWaitEmulatorReady() throws Exception {
MobilePlatform instance = org.netbeans.modules.cordova.platforms.api.PlatformManager.getPlatform(PlatformManager.ANDROID_TYPE);
instance.setSdkLocation("/Users/beci/android-sdk-macosx");
System.out.println(instance.waitEmulatorReady(10000));
}
@Test
public void testConnectIOS() throws Exception {
WebSocketClientImpl client = new WebSocketClientImpl(new URI("ws://[::1]:9999/devtools/page/1"), ProtocolDraft.getProtocol(76));
WebSocketReadHandler handler = new ReadH(client);
client.setWebSocketReadHandler(handler);
Thread thread = new Thread(client);
thread.run();
Thread.sleep(2000);
thread.stop();
//client.sendMessage("{\"id\":5,\"method\":\"Debugger.enable\"}");
System.out.println("nevim");
}
@Test
public void testConnectChrome() throws Exception {
WebSocketClientImpl client = new WebSocketClientImpl(new URI("ws://localhost:9222/devtools/page/2_2"), ProtocolDraft.getRFC());
WebSocketReadHandler handler = new ReadH(client);
client.setWebSocketReadHandler(handler);
Thread thread = new Thread( client);
thread.start();
System.out.println("nevim");
}
// /**
// * Test of createProject method, of class AndroidPlatform.
// */
// @Test
// public void testCreateProject() throws Exception {
// File dir = new File(getWorkDir() + File.separator + "androidtest");
// String targetId = "12";
// String projectName = "AndroidTest";
// String activityName = "MainActivity";
// String packageName = "com.test";
// AndroidPlatform instance = new AndroidPlatform();
// instance.createProject(dir, targetId, projectName, activityName, packageName);
//
// File build = new File(dir.getAbsolutePath() + File.separator + "build.xml");
// assertTrue(build.exists());
// }
//
// /**
// * Test of buildProject method, of class AndroidPlatform.
// */
// @Test
// public void testBuildCleanProject() throws IOException {
// File dir = new File(getWorkDir() + File.separator + "androidtest2");
// String targetId = "12";
// String projectName = "AndroidTest";
// String activityName = "MainActivity";
// String packageName = "com.test";
// AndroidPlatform instance = new AndroidPlatform();
// instance.createProject(dir, targetId, projectName, activityName, packageName);
//
// File build = new File(dir.getAbsolutePath() + File.separator + "build.xml");
// assertTrue(build.exists());
//
// instance.buildProject(dir, "debug").waitFinished();
//
// File bin = new File(dir.getAbsolutePath() + File.separator + "bin");
// assertTrue(bin.exists());
// }
//
// /**
// * Test of cleanProject method, of class AndroidPlatform.
// */
// @Test
// public void testCleanProject() throws Exception {
// File dir = new File(getWorkDir() + File.separator + "androidtest3");
// String targetId = "12";
// String projectName = "AndroidTest";
// String activityName = "MainActivity";
// String packageName = "com.test";
// AndroidPlatform instance = new AndroidPlatform();
// instance.createProject(dir, targetId, projectName, activityName, packageName);
//
// File build = new File(dir.getAbsolutePath() + File.separator + "build.xml");
// assertTrue(build.exists());
//
// instance.buildProject(dir, "debug").waitFinished();
//
// File bin = new File(dir.getAbsolutePath() + File.separator + "bin");
// assertTrue(bin.exists());
//
// instance.cleanProject(dir);
// }
private static class ReadH implements WebSocketReadHandler {
private final WebSocketClientImpl client;
private ReadH(WebSocketClientImpl client) {
this.client = client;
}
@Override
public void accepted(SelectionKey key) {
System.out.println("accepted");
client.sendMessage("request: { \"id\": 123, \"method\": \"Page.disable\"}");
}
@Override
public void read(SelectionKey key, byte[] message, Integer dataType) {
System.out.println("read");
System.out.println(key);
System.out.println(message);
System.out.println(dataType);
}
@Override
public void closed(SelectionKey key) {
System.out.println("closed");
System.out.println(key);
}
}
}