blob: edd5f072575c0b20f1d88f0eb58fc4189ea14e6c [file] [log] [blame]
/*
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.apple.jobjc;
import junit.framework.TestCase;
import com.apple.jobjc.Invoke.FunCall;
import com.apple.jobjc.PrimitiveCoder.DoubleCoder;
import com.apple.jobjc.appkit.AppKitFramework;
import com.apple.jobjc.appkit.NSApplication;
import com.apple.jobjc.appkit.NSApplicationClass;
import com.apple.jobjc.appkit.NSColorPanel;
import com.apple.jobjc.appkit.NSWorkspace;
import com.apple.jobjc.foundation.FoundationFramework;
import com.apple.jobjc.foundation.NSAutoreleasePool;
import com.apple.jobjc.foundation.NSPoint;
import com.apple.jobjc.foundation.NSString;
import com.apple.jobjc.foundation.NSStringClass;
public class IntroTest extends TestCase{
// The low-level core makes function calls, sends messages, marshals data, etc.
public void testCore(){
// pass security check and get ahold of a runtime (should cache this)
final JObjCRuntime RUNTIME = JObjCRuntime.getInstance();
final NativeArgumentBuffer ARGS = JObjCRuntime.getInstance().getThreadLocalState();
// create a funcall (should cache this)
final FunCall fc = new FunCall(RUNTIME, "sin", DoubleCoder.INST, DoubleCoder.INST);
// start function call
fc.init(ARGS);
// push an arg
DoubleCoder.INST.push(ARGS, 3.14159265 / 2.0);
// make the call
fc.invoke(ARGS);
// read the return value
double ret = DoubleCoder.INST.pop(ARGS);
assertEquals(1.0, ret);
}
// Frameworks bridge the Mac OS X frameworks
public void testFrameworks(){
// First, get an instance of JObjC:
final JObjC JOBJC = com.apple.jobjc.JObjC.getInstance();
// It's your gateway to the frameworks.
final FoundationFramework FND = JOBJC.Foundation();
final AppKitFramework APP = JOBJC.AppKit();
// From which you can then access...
// enums, defines, constants
int nsmye = FND.NSMaxYEdge();
boolean debug = FND.NSDebugEnabled();
// structs
NSPoint p = FND.makeNSPoint();
p.setX(3);
assertEquals(3.0, p.x());
// C functions
NSPoint p2 = FND.NSMakePoint(12, 34);
assertEquals(12.0, p2.x());
// ... Let's create an AutoreleasePool before we go on
NSAutoreleasePool pool = ((NSAutoreleasePool) FND.NSAutoreleasePool().alloc()).init();
// Objective-C classes
NSStringClass nsc = FND.NSString();
// class-methods
NSString nsStringClassDescr = nsc.description();
// instances
NSString nsi = ((NSString) FND.NSString().alloc()).init();
// instance methods
NSString d = nsi.description();
// The bridge marshals some types for you, but it doesn't
// convert between NSString and Java String automatically.
// For that we use Utils.get().strings().nsString(String)
// and Utils.get().strings().javaString(NSString);
assertEquals("NSString", Utils.get().strings().javaString(nsStringClassDescr));
NSString format = Utils.get().strings().nsString("Foo bar %d baz");
NSString formatted = ((NSString) FND.NSString().alloc()).initWithFormat(format, 34);
String jformatted = Utils.get().strings().javaString(formatted);
assertEquals("Foo bar 34 baz", jformatted);
// Reveal in Finder
// NSString file = Utils.get().strings().nsString(
// "/Applications/Calculator.app/Contents/Resources/Calculator.icns");
// APP.NSWorkspace().sharedWorkspace()
// .selectFile_inFileViewerRootedAtPath(file, null);
pool.drain();
}
}