/* * 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(); } }