package org.jetbrains.plugins.ruby.motion.bridgesupport;
import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.util.Pair;
import com.intellij.testFramework.UsefulTestCase;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;
/**
* @author Dennis.Ushakov
*/
public class BridgeSupportReaderTest extends UsefulTestCase {
public void testReadClassListShort() throws Exception {
final Framework framework = createFramework("RubyMotion");
assertNotNull(framework.getClass("NSObject"));
}
public void testReadClassListLong() throws Exception {
final Framework framework = createFramework("QuartzCore");
assertSize(21, framework.getClasses());
assertNotNull(framework.getClass("CADisplayLink"));
}
public void testReadClassContents() throws Exception {
final Framework framework = createFramework("RubyMotion");
final Class object = framework.getClass("NSObject");
assertNotNull(object);
final Function function = object.getFunction("dispatch_object");
assertNotNull(function);
assertEquals("void*", function.getReturnValue());
}
public void testReadInformalProtocolListLong() throws Exception {
final Framework framework = createFramework("QuartzCore");
assertSize(4, framework.getProtocols());
assertNotNull(framework.getProtocol("CAAnimationDelegate"));
}
public void testReadInformalProtocolContents() throws Exception {
final Framework framework = createFramework("QuartzCore");
final Class protocol = framework.getProtocol("CAAnimationDelegate");
assertNotNull(protocol);
final Function function = protocol.getFunction("animationDidStop:finished:");
assertNotNull(function);
assertSize(2, function.getArguments());
}
public void testReadConstants() throws Exception {
final Framework framework = createFramework("QuartzCore");
assertSize(101, framework.getConstants());
final Constant constant = framework.getConstant("kCAEmitterLayerCircle");
assertNotNull(constant);
assertEquals("NSString*", constant.getDeclaredType());
}
public void testReadStructs() throws Exception {
final Framework framework = createFramework("MapKit");
assertSize(5, framework.getStructs());
final Struct struct = framework.getStruct("MKCoordinateSpan");
assertNotNull(struct);
assertSize(2, struct.getFields());
assertEquals("CLLocationDegrees", struct.getFieldType("latitudeDelta"));
}
public void testReadStringConstants() throws Exception {
final Framework framework = createFramework("SystemConfiguration");
final Constant constant = framework.getConstant("kSCNetworkConnectionPacketsIn");
assertInstanceOf(constant, StringConstant.class);
final StringConstant stringConstant = (StringConstant)constant;
assertEquals("NSString*", stringConstant.getDeclaredType());
assertEquals("PacketsIn", stringConstant.getValue());
assertTrue(stringConstant.isNsString());
}
public void testReadEnums() throws Exception {
final Framework framework = createFramework("OpenGLES");
final Constant constant = framework.getConstant("GL_ARRAY_BUFFER");
assertInstanceOf(constant, Enum.class);
final Enum stringConstant = (Enum)constant;
assertEquals("int", stringConstant.getDeclaredType());
assertEquals("34962", stringConstant.getValue());
}
public void testReadStringConstantsDefault() throws Exception {
final Framework framework = createFramework("AudioToolbox");
final Constant constant = framework.getConstant("kAFInfoDictionary_Lyricist");
assertInstanceOf(constant, StringConstant.class);
final StringConstant stringConstant = (StringConstant)constant;
assertEquals("NSString*", stringConstant.getDeclaredType());
assertEquals("lyricist", stringConstant.getValue());
assertFalse(stringConstant.isNsString());
}
public void testReadFunction() throws Exception {
final Framework framework = createFramework("AudioToolbox");
assertSize(203, framework.getFunctions());
final Function function = framework.getFunction("AUGraphConnectNodeInput");
assertNotNull(function);
assertEquals("OSStatus", function.getReturnValue());
final List<Pair<String, String>> arguments = function.getArguments();
assertEquals(5, arguments.size());
assertEquals(Pair.create("inDestNode", "AUNode"), arguments.get(3));
assertFalse(function.isVariadic());
}
public void testReadFunctionVariadic() throws Exception {
final Framework framework = createFramework("CoreFoundation");
final Function function = framework.getFunction("CFStringAppendFormat");
assertNotNull(function);
assertTrue(function.isVariadic());
}
public void testReadClassMethod() throws Exception {
final Framework framework = createFramework("AVFoundation");
final Class clazz = framework.getClass("AVAssetReaderAudioMixOutput");
assertNotNull(clazz);
final Function function = clazz.getFunction("assetReaderAudioMixOutputWithAudioTracks:audioSettings:");
assertNotNull(function);
assertTrue(function.isClassMethod());
}
public void testReadFunctionAlias() throws Exception {
final Framework framework = createFramework("CoreGraphics");
assertSize(5, framework.getFunctionAliases().keySet());
assertEquals("__CGSizeApplyAffineTransform", framework.getOriginalFunctionName("CGSizeApplyAffineTransform"));
}
public void testReadAndroidClass() throws Exception {
final Framework framework = createFramework("android");
assertNotNull(framework.getClass("Android"));
assertNotNull(framework.getClass("Android::App"));
assertNotNull(framework.getClass("Android::App::Activity"));
}
public void testReadAndroidInterface() throws Exception {
final Framework framework = createFramework("android");
assertNotNull(framework.getClass("Android::Database::Cursor"));
}
public void testReadAndroidClassContents() throws Exception {
final Framework framework = createFramework("android");
final Class activity = framework.getClass("Android::App::Activity");
assertNotNull(activity);
Function function = activity.getFunction("managedQuery");
assertNotNull(function);
assertEquals("Android::Database::Cursor", function.getReturnValue());
final List<Pair<String, String>> arguments = function.getArguments();
assertEquals(5, arguments.size());
assertEquals("Android::Net::Uri", arguments.get(0).second);
assertEquals("Array<Java::Lang::String>", arguments.get(1).second);
assertEquals("Java::Lang::String", arguments.get(2).second);
assertEquals("Array<Java::Lang::String>", arguments.get(3).second);
assertEquals("Java::Lang::String", arguments.get(4).second);
function = activity.getFunction("isTaskRoot");
assertNotNull(function);
assertEquals("bool", function.getReturnValue());
}
private static Framework createFramework(final String motion) throws Exception {
return BridgeSupportReader.read(motion, "666", getTestText(motion), false);
}
private static InputStream getTestText(final String filename) throws Exception {
final String path = PathManager.getHomePath() + "/contrib/ruby-motion/test/org/jetbrains/plugins/ruby/motion/bridgesupport/data/" + filename + ".bridgesupport";
final File file = new File(path);
assertTrue(path, file.exists());
return new FileInputStream(file);
}
}