package org.jetbrains.plugins.ruby.motion; import org.jetbrains.plugins.ruby.motion.symbols.MotionSymbolUtil; import org.jetbrains.plugins.ruby.ruby.codeInsight.symbols.structure.SymbolFilterFactory; import org.jetbrains.plugins.ruby.ruby.codeInsight.types.*; import org.jetbrains.plugins.ruby.ruby.codeInsight.types.collections.RArrayType; import org.jetbrains.plugins.ruby.ruby.codeInsight.types.impl.REmptyType; /** * @author Dennis.Ushakov */ public class RubyMotionTypeConversionTest extends RubyMotionLightFixtureTestCase { @Override protected String getTestDataRelativePath() { return "testApp"; } public void testBoolean() { defaultConfigure(); RType type = MotionSymbolUtil.getTypeByName(getModule(), "bool"); assertEquals("TrueClass or FalseClass", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "BOOL"); assertEquals("TrueClass or FalseClass", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "bool*"); assertInstanceOf(type, RArrayType.class); assertEquals("TrueClass or FalseClass", ((RArrayType)type).getItemType().getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "BOOL*"); assertInstanceOf(type, RArrayType.class); assertEquals("TrueClass or FalseClass", ((RArrayType)type).getItemType().getPresentableName()); } public void testVoid() { defaultConfigure(); RType type = MotionSymbolUtil.getTypeByName(getModule(), "void"); assertEquals(REmptyType.INSTANCE, type); type = MotionSymbolUtil.getTypeByName(getModule(), "void*"); assertInstanceOf(type, RArrayType.class); assertEquals(REmptyType.INSTANCE, ((RArrayType)type).getItemType()); } public void testFloat() { defaultConfigure(); RType type = MotionSymbolUtil.getTypeByName(getModule(), "float"); assertEquals("Float", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "double"); assertEquals("Float", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "CGFloat"); assertEquals("Float", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "Float32"); assertEquals("Float", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "Float64"); assertEquals("Float", type.getPresentableName()); } public void testInt() { defaultConfigure(); RType type = MotionSymbolUtil.getTypeByName(getModule(), "int"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "char"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "short"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "long"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "long long"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "unsigned int"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "unsigned char"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "unsigned short"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "unsigned long"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "unsigned long long"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "Byte"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "SignedByte"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "Int16"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "SInt16"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "UInt16"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "Int64"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "NSInteger"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "NSUInteger"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "int32_t"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "uint64_t"); assertEquals("Fixnum", type.getPresentableName()); type = MotionSymbolUtil.getTypeByName(getModule(), "size_t"); assertEquals("Fixnum", type.getPresentableName()); } public void testNSObject() { defaultConfigure(); RType type = MotionSymbolUtil.getTypeByName(getModule(), "NSObject*"); assertInstanceOf(type, RSymbolType.class); assertEquals("NSObject", ((RSymbolType)type).getSymbol().getName()); type = MotionSymbolUtil.getTypeByName(getModule(), "NSObject**"); assertInstanceOf(type, RArrayType.class); final RType itemType = ((RArrayType)type).getItemType(); assertInstanceOf(itemType, RSymbolType.class); assertEquals("NSObject", ((RSymbolType)itemType).getSymbol().getName()); } public void testSuperTypes() { defaultConfigure(); assertHasMembers(CoreTypes.String, "lowercaseString", "appendFormat"); assertHasMembers(CoreTypes.Array, "sortedArrayHint", "removeObjectIdenticalTo"); assertHasMembers(CoreTypes.Numeric, "initWithLong"); assertHasMembers(CoreTypes.Hash, "descriptionInStringsFileFormat", "addEntriesFromDictionary"); assertHasMembers(CoreTypes.Time, "dateByAddingTimeInterval"); } private void assertHasMembers(final String className, final String... members) { final RType type = RTypeFactory.createTypeByFQN(getProject(), className, Context.MIXED_PRIVATE); for (String member : members) { assertNotNull("Does not have member " + member, type.getMemberForName(member, SymbolFilterFactory.EMPTY_FILTER, myFixture.getFile())); } } }