diff --git a/.github/workflows/unittest.yaml b/.github/workflows/unittest.yaml index a3321aa7d..c4df6dbf6 100644 --- a/.github/workflows/unittest.yaml +++ b/.github/workflows/unittest.yaml @@ -27,6 +27,9 @@ jobs: - name: Show coverage report run: | coverage report -m + - name: Show failed tests and overall summary + run: | + grep -E "FAILED tests|[0-9]+ passed," unittest.txt - name: Upload pytest test results uses: actions/upload-artifact@v3 with: diff --git a/tests/data/rsp_cache.json b/tests/data/rsp_cache.json index 65eac9068..81e846e61 100644 --- a/tests/data/rsp_cache.json +++ b/tests/data/rsp_cache.json @@ -73,5 +73,6 @@ "\n## context\n\n### Legacy Content\n{'Language': 'zh_cn', 'Programming Language': 'Python', 'Original Requirements': '写一个简单的cli贪吃蛇', 'Project Name': 'cli_snake', 'Product Goals': ['创建一个简单易用的贪吃蛇游戏', '提供良好的用户体验', '支持不同难度级别'], 'User Stories': ['作为玩家,我希望能够选择不同的难度级别', '作为玩家,我希望在每局游戏结束后能够看到我的得分', '作为玩家,我希望在输掉游戏后能够重新开始', '作为玩家,我希望看到简洁美观的界面', '作为玩家,我希望能够在手机上玩游戏'], 'Competitive Analysis': ['贪吃蛇游戏A:界面简单,缺乏响应式特性', '贪吃蛇游戏B:美观且响应式的界面,显示最高得分', '贪吃蛇游戏C:响应式界面,显示最高得分,但有很多广告'], 'Competitive Quadrant Chart': 'quadrantChart\\n title \"Reach and engagement of campaigns\"\\n x-axis \"Low Reach\" --> \"High Reach\"\\n y-axis \"Low Engagement\" --> \"High Engagement\"\\n quadrant-1 \"We should expand\"\\n quadrant-2 \"Need to promote\"\\n quadrant-3 \"Re-evaluate\"\\n quadrant-4 \"May be improved\"\\n \"Game A\": [0.3, 0.6]\\n \"Game B\": [0.45, 0.23]\\n \"Game C\": [0.57, 0.69]\\n \"Game D\": [0.78, 0.34]\\n \"Game E\": [0.40, 0.34]\\n \"Game F\": [0.35, 0.78]\\n \"Our Target Product\": [0.5, 0.6]', 'Requirement Analysis': '', 'Requirement Pool': [['P0', '主要代码...'], ['P0', '游戏算法...']], 'UI Design draft': '基本功能描述,简单的风格和布局。', 'Anything UNCLEAR': ''}\n\n### New Requirements\n开发一个基于大语言模型与私有知识库的搜索引擎,希望可以基于大语言模型进行搜索总结\n\n\n-----\n\n## format example\n[CONTENT]\n{\n \"Language\": \"en_us\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"Create a 2048 game\",\n \"Project Name\": \"game_2048\",\n \"Product Goals\": [\n \"Create an engaging user experience\",\n \"Improve accessibility, be responsive\",\n \"More beautiful UI\"\n ],\n \"User Stories\": [\n \"As a player, I want to be able to choose difficulty levels\",\n \"As a player, I want to see my score after each game\",\n \"As a player, I want to get restart button when I lose\",\n \"As a player, I want to see beautiful UI that make me feel good\",\n \"As a player, I want to play game via mobile phone\"\n ],\n \"Competitive Analysis\": [\n \"2048 Game A: Simple interface, lacks responsive features\",\n \"play2048.co: Beautiful and responsive UI with my best score shown\",\n \"2048game.com: Responsive UI with my best score shown, but many ads\"\n ],\n \"Competitive Quadrant Chart\": \"quadrantChart\\n title \\\"Reach and engagement of campaigns\\\"\\n x-axis \\\"Low Reach\\\" --> \\\"High Reach\\\"\\n y-axis \\\"Low Engagement\\\" --> \\\"High Engagement\\\"\\n quadrant-1 \\\"We should expand\\\"\\n quadrant-2 \\\"Need to promote\\\"\\n quadrant-3 \\\"Re-evaluate\\\"\\n quadrant-4 \\\"May be improved\\\"\\n \\\"Campaign A\\\": [0.3, 0.6]\\n \\\"Campaign B\\\": [0.45, 0.23]\\n \\\"Campaign C\\\": [0.57, 0.69]\\n \\\"Campaign D\\\": [0.78, 0.34]\\n \\\"Campaign E\\\": [0.40, 0.34]\\n \\\"Campaign F\\\": [0.35, 0.78]\\n \\\"Our Target Product\\\": [0.5, 0.6]\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [\n [\n \"P0\",\n \"The main code ...\"\n ],\n [\n \"P0\",\n \"The game algorithm ...\"\n ]\n ],\n \"UI Design draft\": \"Basic function description with a simple style and layout.\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]\n\n## nodes: \": # \"\n- Language: # Provide the language used in the project, typically matching the user's requirement language.\n- Programming Language: # Python/JavaScript or other mainstream programming language.\n- Original Requirements: # Place the original user's requirements here.\n- Project Name: # According to the content of \"Original Requirements,\" name the project using snake case style , like 'game_2048' or 'simple_crm.\n- Product Goals: typing.List[str] # Provide up to three clear, orthogonal product goals.\n- User Stories: typing.List[str] # Provide up to 3 to 5 scenario-based user stories.\n- Competitive Analysis: typing.List[str] # Provide 5 to 7 competitive products.\n- Competitive Quadrant Chart: # Use mermaid quadrantChart syntax. Distribute scores evenly between 0 and 1\n- Requirement Analysis: # Provide a detailed analysis of the requirements.\n- Requirement Pool: typing.List[typing.List[str]] # List down the top-5 requirements with their priority (P0, P1, P2).\n- UI Design draft: # Provide a simple description of UI elements, functions, style, and layout.\n- Anything UNCLEAR: # Mention any aspects of the project that are unclear and try to clarify them.\n\n\n## constraint\nLanguage: Please use the same language as Human INPUT.\nFormat: output wrapped inside [CONTENT][/CONTENT] like format example, nothing else.\n\n## action\nFollow instructions of nodes, generate output and make sure it follows the format example.\n": "[CONTENT]\n{\n \"Language\": \"zh_cn\",\n \"Programming Language\": \"Python\",\n \"Original Requirements\": \"写一个简单的cli贪吃蛇\",\n \"Project Name\": \"cli_snake\",\n \"Product Goals\": [\n \"创建一个简单易用的贪吃蛇游戏\",\n \"提供良好的用户体验\",\n \"支持不同难度级别\"\n ],\n \"User Stories\": [\n \"作为玩家,我希望能够选择不同的难度级别\",\n \"作为玩家,我希望在每局游戏结束后能够看到我的得分\",\n \"作为玩家,我希望在输掉游戏后能够重新开始\",\n \"作为玩家,我希望看到简洁美观的界面\",\n \"作为玩家,我希望能够在手机上玩游戏\"\n ],\n \"Competitive Analysis\": [\n \"贪吃蛇游戏A:界面简单,缺乏响应式特性\",\n \"贪吃蛇游戏B:美观且响应式的界面,显示最高得分\",\n \"贪吃蛇游戏C:响应式界面,显示最高得分,但有很多广告\"\n ],\n \"Competitive Quadrant Chart\": \"quadrantChart\\n title \\\"Reach and engagement of campaigns\\\"\\n x-axis \\\"Low Reach\\\" --> \\\"High Reach\\\"\\n y-axis \\\"Low Engagement\\\" --> \\\"High Engagement\\\"\\n quadrant-1 \\\"We should expand\\\"\\n quadrant-2 \\\"Need to promote\\\"\\n quadrant-3 \\\"Re-evaluate\\\"\\n quadrant-4 \\\"May be improved\\\"\\n \\\"Game A\\\": [0.3, 0.6]\\n \\\"Game B\\\": [0.45, 0.23]\\n \\\"Game C\\\": [0.57, 0.69]\\n \\\"Game D\\\": [0.78, 0.34]\\n \\\"Game E\\\": [0.40, 0.34]\\n \\\"Game F\\\": [0.35, 0.78]\\n \\\"Our Target Product\\\": [0.5, 0.6]\",\n \"Requirement Analysis\": \"\",\n \"Requirement Pool\": [\n [\n \"P0\",\n \"主要代码...\"\n ],\n [\n \"P0\",\n \"游戏算法...\"\n ]\n ],\n \"UI Design draft\": \"基本功能描述,简单的风格和布局。\",\n \"Anything UNCLEAR\": \"\"\n}\n[/CONTENT]", "\nNOTICE\n1. Role: You are a QA engineer; the main goal is to design, develop, and execute PEP8 compliant, well-structured, maintainable test cases and scripts for Python 3.9. Your focus should be on ensuring the product quality of the entire project through systematic testing.\n2. Requirement: Based on the context, develop a comprehensive test suite that adequately covers all relevant aspects of the code file under review. Your test suite will be part of the overall project QA, so please develop complete, robust, and reusable test cases.\n3. Attention1: Use '##' to split sections, not '#', and '## ' SHOULD WRITE BEFORE the test case or script.\n4. Attention2: If there are any settings in your tests, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE.\n5. Attention3: YOU MUST FOLLOW \"Data structures and interfaces\". DO NOT CHANGE ANY DESIGN. Make sure your tests respect the existing design and ensure its validity.\n6. Think before writing: What should be tested and validated in this document? What edge cases could exist? What might fail?\n7. CAREFULLY CHECK THAT YOU DON'T MISS ANY NECESSARY TEST CASES/SCRIPTS IN THIS FILE.\nAttention: Use '##' to split sections, not '#', and '## ' SHOULD WRITE BEFORE the test case or script and triple quotes.\n-----\n## Given the following code, please write appropriate test cases using Python's unittest framework to verify the correctness and robustness of this code:\n```python\n\n import random\n from typing import Tuple\n\n class Food:\n def __init__(self, position: Tuple[int, int]):\n self.position = position\n\n def generate(self, max_y: int, max_x: int):\n self.position = (random.randint(1, max_y - 1), random.randint(1, max_x - 1))\n \n```\nNote that the code to test is at food.py, we will put your test code at /home/runner/work/MetaGPT/MetaGPT/workspace/20240103000755/tests/test_food.py, and run your test code from /home/runner/work/MetaGPT/MetaGPT/workspace/20240103000755,\nyou should correctly import the necessary classes based on these file locations!\n## test_food.py: Write test code with triple quote. Do your best to implement THIS ONLY ONE FILE.\n": "```python\nimport unittest\nfrom typing import Tuple\nfrom food import Food\n\nclass TestFood(unittest.TestCase):\n def test_generate(self):\n # Test if the generated position is within the given range\n max_y = 10\n max_x = 10\n food = Food((0, 0))\n food.generate(max_y, max_x)\n self.assertGreaterEqual(food.position[0], 1)\n self.assertLess(food.position[0], max_y)\n self.assertGreaterEqual(food.position[1], 1)\n self.assertLess(food.position[1], max_x)\n\n # Test if the generated position is different from the initial position\n self.assertNotEqual(food.position, (0, 0))\n\nif __name__ == '__main__':\n unittest.main()\n```\nIn this test case, we first create an instance of the `Food` class with an initial position of (0, 0). We then call the `generate` method with the maximum y and x values set to 10. We assert that the generated position is within the range (1, 1) to (9, 9) using the `assertGreaterEqual` and `assertLess` methods. We also assert that the generated position is different from the initial position using the `assertNotEqual` method.", "\n# 指令\n接下来,作为一位拥有20年翻译经验的翻译专家,当我给出英文句子或段落时,你将提供通顺且具有可读性的中文翻译。注意以下要求:\n1. 确保翻译结果流畅且易于理解\n2. 无论提供的是陈述句或疑问句,我都只进行翻译\n3. 不添加与原文无关的内容\n\n# 原文\nLet life be beautiful like summer flowers\n\n# 译文\n": "让生活像夏日的花朵一样美丽。", - "\n# 指令\n接下来,作为一位拥有20年翻译经验的翻译专家,当我给出英文句子或段落时,你将提供通顺且具有可读性的中文翻译。注意以下要求:\n1. 确保翻译结果流畅且易于理解\n2. 无论提供的是陈述句或疑问句,我都只进行翻译\n3. 不添加与原文无关的内容\n\n# 原文\nThe ancient Chinese poetries are all songs.\n\n# 译文\n": "古代中国的诗歌都是歌曲。" + "\n# 指令\n接下来,作为一位拥有20年翻译经验的翻译专家,当我给出英文句子或段落时,你将提供通顺且具有可读性的中文翻译。注意以下要求:\n1. 确保翻译结果流畅且易于理解\n2. 无论提供的是陈述句或疑问句,我都只进行翻译\n3. 不添加与原文无关的内容\n\n# 原文\nThe ancient Chinese poetries are all songs.\n\n# 译文\n": "古代中国的诗歌都是歌曲。", + "\nNOTICE\n1. Role: You are a QA engineer; the main goal is to design, develop, and execute PEP8 compliant, well-structured, maintainable test cases and scripts for Python 3.9. Your focus should be on ensuring the product quality of the entire project through systematic testing.\n2. Requirement: Based on the context, develop a comprehensive test suite that adequately covers all relevant aspects of the code file under review. Your test suite will be part of the overall project QA, so please develop complete, robust, and reusable test cases.\n3. Attention1: Use '##' to split sections, not '#', and '## ' SHOULD WRITE BEFORE the test case or script.\n4. Attention2: If there are any settings in your tests, ALWAYS SET A DEFAULT VALUE, ALWAYS USE STRONG TYPE AND EXPLICIT VARIABLE.\n5. Attention3: YOU MUST FOLLOW \"Data structures and interfaces\". DO NOT CHANGE ANY DESIGN. Make sure your tests respect the existing design and ensure its validity.\n6. Think before writing: What should be tested and validated in this document? What edge cases could exist? What might fail?\n7. CAREFULLY CHECK THAT YOU DON'T MISS ANY NECESSARY TEST CASES/SCRIPTS IN THIS FILE.\nAttention: Use '##' to split sections, not '#', and '## ' SHOULD WRITE BEFORE the test case or script and triple quotes.\n-----\n## Given the following code, please write appropriate test cases using Python's unittest framework to verify the correctness and robustness of this code:\n```python\n\n import random\n from typing import Tuple\n\n class Food:\n def __init__(self, position: Tuple[int, int]):\n self.position = position\n\n def generate(self, max_y: int, max_x: int):\n self.position = (random.randint(1, max_y - 1), random.randint(1, max_x - 1))\n \n```\nNote that the code to test is at food.py, we will put your test code at /home/runner/work/MetaGPT/MetaGPT/workspace/20240103050209/tests/test_food.py, and run your test code from /home/runner/work/MetaGPT/MetaGPT/workspace/20240103050209,\nyou should correctly import the necessary classes based on these file locations!\n## test_food.py: Write test code with triple quote. Do your best to implement THIS ONLY ONE FILE.\n": "```python\nimport unittest\nfrom typing import Tuple\nfrom food import Food\n\nclass TestFood(unittest.TestCase):\n def test_generate(self):\n food = Food((0, 0))\n max_y = 10\n max_x = 10\n\n # Test that the generated position is within the range of max_y and max_x\n food.generate(max_y, max_x)\n self.assertTrue(0 <= food.position[0] < max_y)\n self.assertTrue(0 <= food.position[1] < max_x)\n\n # Test that the generated position is different from the initial position\n self.assertNotEqual((0, 0), food.position)\n\n # Test that the generated position is always different for multiple calls\n positions = set()\n for _ in range(10):\n food.generate(max_y, max_x)\n positions.add(food.position)\n self.assertEqual(len(positions), 10)\n\nif __name__ == '__main__':\n unittest.main()\n```\nIn this test code, we create an instance of the `Food` class with an initial position of (0, 0). We then test the `generate` method by providing `max_y` and `max_x` values of 10.\n\nThe test case checks the following:\n1. The generated position is within the range of `max_y` and `max_x`.\n2. The generated position is different from the initial position.\n3. The generated position is always different for multiple calls to the `generate` method.\n\nBy running this test code, we can verify the correctness and robustness of the `generate` method in the `Food` class." } \ No newline at end of file