Files
Android-pyApi/test_scripts/test_extended_api.py
T
shuiyu1123 dab21b6710 test: 添加扩展 API 测试脚本
- 测试 android.os 模块 (Build, SystemClock, Environment, Process, Bundle, BatteryManager, PowerManager, Vibrator, PatternMatcher, FileUtils)
- 测试 android.content 模块 (Uri, ContentValues, Context, SharedPreferences, ComponentName, ClipData, ClipboardManager)
- 测试 android.app 模块 (Intent, Notification, NotificationManager, AlarmManager)
- 测试 android.graphics 模块 (Color, Bitmap, Paint, Rect)
- 测试 java 模块 (String, StringBuilder, Integer, Math, ArrayList, HashMap, JSONObject, File)
- 所有测试通过
2026-06-26 22:10:18 +08:00

400 lines
13 KiB
Python

# -*- coding: utf-8 -*-
"""
扩展 Android API 测试脚本
测试 android.os, android.content, android.app, android.widget, android.graphics 等模块
"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
def test_os_module():
"""测试 android.os 模块"""
print("\n" + "=" * 60)
print("android.os 模块测试")
print("=" * 60)
from android_pyapi.android.os import (
Build, SystemClock, Environment, Process,
Bundle, Handler, Looper, Message,
BatteryManager, PowerManager, Vibrator,
AsyncTask, CountDownTimer, Messenger,
FileObserver, FileUtils, PatternMatcher,
)
# Build 测试
print("\n[Build 设备信息]")
print(f" MODEL: {Build.MODEL}")
print(f" MANUFACTURER: {Build.MANUFACTURER}")
print(f" BRAND: {Build.BRAND}")
print(f" DEVICE: {Build.DEVICE}")
print(f" FINGERPRINT: {Build.FINGERPRINT}")
print(f" SDK_INT: {Build.VERSION.SDK_INT}")
print(f" RELEASE: {Build.VERSION.RELEASE}")
# SystemClock 测试
print("\n[SystemClock 系统时钟]")
print(f" 启动时间: {SystemClock.elapsedRealtime()} ms")
print(f" 运行时间: {SystemClock.uptimeMillis()} ms")
# Environment 测试
print("\n[Environment 环境目录]")
print(f" 外部存储: {Environment.getExternalStorageDirectory()}")
print(f" 下载目录: {Environment.getExternalStoragePublicDirectory('Download')}")
print(f" 数据目录: {Environment.getDataDirectory()}")
print(f" 根目录: {Environment.getRootDirectory()}")
# Process 测试
print("\n[Process 进程信息]")
print(f" PID: {Process.myPid()}")
print(f" TID: {Process.myTid()}")
# Bundle 测试
print("\n[Bundle 数据容器]")
bundle = Bundle()
bundle.putString("name", "Android-pyApi")
bundle.putInt("version", 100)
bundle.putBoolean("windows", True)
print(f" name: {bundle.getString('name')}")
print(f" version: {bundle.getInt('version')}")
print(f" windows: {bundle.getBoolean('windows')}")
print(f" size: {bundle.size()}")
# BatteryManager 测试
print("\n[BatteryManager 电池管理]")
bm = BatteryManager()
print(f" 电量: {bm.getLevel()}%")
print(f" 充电: {bm.isCharging()}")
print(f" 存在: {bm.isPresent()}")
print(f" 技术: {bm.getTechnology()}")
# PowerManager 测试
print("\n[PowerManager 电源管理]")
pm = PowerManager()
print(f" 交互: {pm.isInteractive()}")
print(f" 屏幕: {pm.isScreenOn()}")
# Vibrator 测试
print("\n[Vibrator 振动器]")
vib = Vibrator()
print(f" 有振动器: {vib.hasVibrator()}")
# PatternMatcher 测试
print("\n[PatternMatcher 模式匹配]")
pm_literal = PatternMatcher("/sdcard/test.txt", PatternMatcher.PATTERN_LITERAL)
pm_prefix = PatternMatcher("/sdcard/", PatternMatcher.PATTERN_PREFIX)
print(f" literal match: {pm_literal.match('/sdcard/test.txt')}")
print(f" prefix match: {pm_prefix.match('/sdcard/test.txt')}")
# FileUtils 测试
print("\n[FileUtils 文件工具]")
test_file = os.path.join(os.environ.get('TEMP', '/tmp'), 'android_pyapi_test.txt')
FileUtils.stringToFile(test_file, "Hello, Android-pyApi!")
content = FileUtils.readFileToString(test_file)
print(f" 写入读取: {content}")
os.remove(test_file)
def test_content_module():
"""测试 android.content 模块"""
print("\n" + "=" * 60)
print("android.content 模块测试")
print("=" * 60)
from android_pyapi.android.content import (
Uri, ContentValues, ContentResolver, Context,
SharedPreferences, IntentFilter, BroadcastReceiver,
ComponentName, ClipData, ClipDescription,
ContentProvider, ContentProviderClient,
ClipboardManager,
)
# Uri 测试
print("\n[Uri 统一资源标识符]")
uri = Uri.parse("https://example.com/path?query=1&foo=bar#fragment")
print(f" scheme: {uri.getScheme()}")
print(f" host: {uri.getHost()}")
print(f" path: {uri.getPath()}")
print(f" query: {uri.getQuery()}")
print(f" fragment: {uri.getFragment()}")
print(f" toString: {uri.toString()}")
# ContentValues 测试
print("\n[ContentValues 内容值]")
cv = ContentValues()
cv.put("title", "Test")
cv.put("value", 42)
cv.put("flag", True)
print(f" title: {cv.getAsString('title')}")
print(f" value: {cv.getAsInteger('value')}")
print(f" flag: {cv.getAsBoolean('flag')}")
print(f" size: {cv.size()}")
# Context 测试
print("\n[Context 应用上下文]")
ctx = Context()
print(f" packageName: {ctx.getPackageName()}")
print(f" filesDir: {ctx.getFilesDir()}")
print(f" cacheDir: {ctx.getCacheDir()}")
print(f" dataDir: {ctx.getDataDir()}")
# SharedPreferences 测试
print("\n[SharedPreferences 持久化存储]")
sp = ctx.getSharedPreferences("test_prefs")
editor = sp.edit()
editor.putString("username", "test_user")
editor.putInt("login_count", 5)
editor.putBoolean("remember", True)
editor.commit()
print(f" username: {sp.getString('username')}")
print(f" login_count: {sp.getInt('login_count')}")
print(f" remember: {sp.getBoolean('remember')}")
# ComponentName 测试
print("\n[ComponentName 组件名]")
cn = ComponentName("com.example.app", "com.example.app.MainActivity")
print(f" package: {cn.getPackageName()}")
print(f" class: {cn.getClassName()}")
print(f" short: {cn.getShortClassName()}")
print(f" flatten: {cn.flattenToString()}")
# ClipData 测试
print("\n[ClipData 剪贴板数据]")
clip = ClipData.newPlainText("label", "Hello, Clipboard!")
item = clip.getItemAt(0)
print(f" text: {item.getText()}")
print(f" itemCount: {clip.getItemCount()}")
# ClipboardManager 测试
print("\n[ClipboardManager 剪贴板管理]")
cm = ClipboardManager()
cm.setText("Test Clipboard")
print(f" getText: {cm.getText()}")
print(f" hasText: {cm.hasText()}")
def test_app_module():
"""测试 android.app 模块"""
print("\n" + "=" * 60)
print("android.app 模块测试")
print("=" * 60)
from android_pyapi.android.app import (
Intent, Activity, Service,
Notification, NotificationManager,
AlarmManager, ActivityManager,
)
# Intent 测试
print("\n[Intent 意图]")
intent = Intent(Intent.ACTION_VIEW)
intent.setData("https://example.com")
intent.putExtra("title", "Test")
intent.putExtra("count", 42)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
print(f" action: {intent.getAction()}")
print(f" data: {intent.getData()}")
print(f" title: {intent.getStringExtra('title')}")
print(f" count: {intent.getIntExtra('count')}")
print(f" flags: {hex(intent.getFlags())}")
# Notification 测试
print("\n[Notification 通知]")
notif = Notification()
notif.title = "Test Notification"
notif.text = "This is a test"
print(f" title: {notif.title}")
print(f" text: {notif.text}")
# NotificationManager 测试
print("\n[NotificationManager 通知管理]")
nm = NotificationManager()
print(f" 类型: {type(nm).__name__}")
# AlarmManager 测试
print("\n[AlarmManager 闹钟管理]")
am = AlarmManager()
print(f" 类型: {type(am).__name__}")
def test_widget_module():
"""测试 android.widget 模块"""
print("\n" + "=" * 60)
print("android.widget 模块测试")
print("=" * 60)
try:
from android_pyapi.android.widget import (
Toast, AlertDialog, Button, TextView,
EditText, ListView, RecyclerView,
)
# Toast 测试
print("\n[Toast 提示]")
toast = Toast.makeText(None, "Hello, Toast!", Toast.LENGTH_SHORT)
print(f" text: {toast._text}")
print(f" duration: {toast._duration}")
# AlertDialog 测试
print("\n[AlertDialog 对话框]")
dialog = AlertDialog(None)
print(f" 类型: {type(dialog).__name__}")
except ImportError as e:
print(f" widget 模块导入失败: {e}")
def test_graphics_module():
"""测试 android.graphics 模块"""
print("\n" + "=" * 60)
print("android.graphics 模块测试")
print("=" * 60)
try:
from android_pyapi.android.graphics import (
Bitmap, Canvas, Paint, Color,
Rect, RectF, Path, Matrix,
)
# Color 测试
print("\n[Color 颜色]")
print(f" RED: {hex(Color.RED)}")
print(f" GREEN: {hex(Color.GREEN)}")
print(f" BLUE: {hex(Color.BLUE)}")
print(f" WHITE: {hex(Color.WHITE)}")
print(f" BLACK: {hex(Color.BLACK)}")
print(f" argb(255,128,64,32): {hex(Color.argb(255, 128, 64, 32))}")
# Bitmap 测试
print("\n[Bitmap 位图]")
bm = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)
print(f" width: {bm.getWidth()}")
print(f" height: {bm.getHeight()}")
print(f" config: {bm.getConfig()}")
# Paint 测试
print("\n[Paint 画笔]")
paint = Paint()
paint.setColor(Color.RED)
paint.setTextSize(24.0)
print(f" color: {hex(paint.getColor())}")
print(f" textSize: {paint.getTextSize()}")
# Rect 测试
print("\n[Rect 矩形]")
rect = Rect(10, 20, 100, 200)
print(f" left: {rect.left}")
print(f" top: {rect.top}")
print(f" right: {rect.right}")
print(f" bottom: {rect.bottom}")
print(f" width: {rect.width()}")
print(f" height: {rect.height()}")
except ImportError as e:
print(f" graphics 模块导入失败: {e}")
def test_java_module():
"""测试 java 模块"""
print("\n" + "=" * 60)
print("java 模块测试")
print("=" * 60)
from android_pyapi.java.lang import (
String, StringBuilder, Integer, Math, System, Thread,
)
from android_pyapi.java.io import (
File, FileInputStream, FileOutputStream,
)
from android_pyapi.java.util import (
ArrayList, HashMap, HashSet,
)
from android_pyapi.org.json import JSONObject, JSONArray
# String 测试
print("\n[String 字符串]")
s = String("Hello, Android-pyApi!")
print(f" length: {s.length()}")
print(f" upper: {s.toUpperCase()}")
print(f" contains('Android'): {s.contains('Android')}")
print(f" substring(7): {s.substring(7)}")
# StringBuilder 测试
print("\n[StringBuilder 字符串构建器]")
sb = StringBuilder()
sb.append("Hello")
sb.append(", ")
sb.append("World!")
print(f" result: {sb.toString()}")
print(f" length: {sb.length()}")
# Integer 测试
print("\n[Integer 整数]")
print(f" parseInt('42'): {Integer.parseInt('42')}")
print(f" MAX_VALUE: {Integer.MAX_VALUE}")
print(f" MIN_VALUE: {Integer.MIN_VALUE}")
# Math 测试
print("\n[Math 数学]")
print(f" PI: {Math.PI}")
print(f" abs(-42): {Math.abs(-42)}")
print(f" max(10, 20): {Math.max(10, 20)}")
print(f" sqrt(144): {Math.sqrt(144)}")
print(f" pow(2, 10): {Math.pow(2, 10)}")
# ArrayList 测试
print("\n[ArrayList 列表]")
lst = ArrayList()
lst.add("Apple")
lst.add("Banana")
lst.add("Cherry")
print(f" size: {lst.size()}")
print(f" first: {lst.get(0)}")
print(f" contains('Banana'): {lst.contains('Banana')}")
# HashMap 测试
print("\n[HashMap 哈希表]")
m = HashMap()
m.put("name", "Android-pyApi")
m.put("version", "1.0.0")
print(f" name: {m.get('name')}")
print(f" size: {m.size()}")
print(f" containsKey('name'): {m.containsKey('name')}")
# JSONObject 测试
print("\n[JSONObject JSON 对象]")
json = JSONObject()
json.put("platform", "Windows")
json.put("python", True)
json.put("version", 3.12)
print(f" toString: {json.toString()}")
print(f" platform: {json.getString('platform')}")
# File 测试
print("\n[File 文件]")
f = File(os.environ.get('TEMP', '/tmp'), "test_file.txt")
print(f" path: {f.getAbsolutePath()}")
print(f" name: {f.getName()}")
print(f" parent: {f.getParent()}")
def main():
"""主测试函数"""
print("=" * 60)
print("Android-pyApi 扩展 API 测试")
print("=" * 60)
test_os_module()
test_content_module()
test_app_module()
test_widget_module()
test_graphics_module()
test_java_module()
print("\n" + "=" * 60)
print("所有测试完成!")
print("=" * 60)
if __name__ == "__main__":
main()