- 新建窗体:生成与 VS 新建窗体相同的 X.cs 和 X.Designer.cs,沿用工程命名空间; 删除窗体(启动窗体不能删) - 标签页按窗体分组,启动窗体排在最前并默认打开 - 运行时点哪个窗口哪个到最前;消息框始终在所有窗口之上 - 示例:项目 1 任务 1 登录与增加用户,两个窗体的 Designer.cs 由设计器引擎生成; 修正书上未声明的 change 变量、关闭后重复 Show 已释放窗体的问题 - 设计器的正则支持中文控件名、类名、命名空间 - 修正:切换窗体时属性窗口的名称没有刷新 - 测试:多窗体端到端测试;新窗体模板测试 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
30 lines
1.6 KiB
TypeScript
30 lines
1.6 KiB
TypeScript
/// <reference types="bun" />
|
|
import { expect, test } from 'bun:test'
|
|
import { generateDesigner, parseDesigner } from './document'
|
|
import { addControl } from './edit'
|
|
import { controlDef } from './catalog'
|
|
import { formNameTaken, newFormFiles, nextFormName, projectNamespace, startupForm } from './templates'
|
|
|
|
const files = [
|
|
{ path: 'Program.cs', content: 'namespace 登录\n{\n static class Program\n {\n static void Main()\n {\n Application.Run(new Login());\n }\n }\n}\n' },
|
|
{ path: 'Login.cs', content: 'namespace 登录\n{\n public partial class Login : Form\n {\n }\n}\n' },
|
|
]
|
|
|
|
test('新窗体沿用工程的命名空间,名字不与已有窗体重复', () => {
|
|
expect(projectNamespace(files)).toBe('登录')
|
|
expect(nextFormName(files)).toBe('Form2')
|
|
expect(formNameTaken(files, 'Login')).toBe(true)
|
|
expect(startupForm(files)).toBe('Login')
|
|
})
|
|
|
|
test('新窗体的 Designer.cs 能被设计器打开,添加控件后格式正确', () => {
|
|
const [, designer] = newFormFiles('登录', 'AddUser')
|
|
const doc = parseDesigner(designer.content)
|
|
expect(generateDesigner(doc)).toBe(designer.content)
|
|
expect(doc.formName).toBe('AddUser')
|
|
const text = generateDesigner(addControl(doc, controlDef('System.Windows.Forms.Button'), '', { x: 10, y: 10 }).doc)
|
|
expect(text).toContain(' this.button1 = new System.Windows.Forms.Button();\n this.SuspendLayout();')
|
|
expect(text).toContain(' this.Controls.Add(this.button1);\n this.Name = "AddUser";')
|
|
expect(text).toContain(' #endregion\n\n private System.Windows.Forms.Button button1;\n }')
|
|
})
|