1
0
mirror of https://github.com/nvbn/thefuck.git synced 2025-03-14 14:48:49 +00:00
thefuck/README.md

131 lines
4.5 KiB
Markdown
Raw Normal View History

# Report for Assignment 1 - Group 82
2015-04-08 18:15:49 +02:00
## Project Information
2015-04-08 18:15:49 +02:00
- **Name:** TheFuck - Magnificent app which corrects your previous console command
- **URL:** https://github.com/dimalarcon/SEP2024-Group82-thefuck
- **Programming Language:** Python
## Code Metrics
2017-08-26 13:31:09 +02:00
- **Number of lines of code:** 547801 (54.7 KLOC)
- **Tool used to measure the number of lines of code:** lizard
2015-07-19 21:53:08 +03:00
![Lizard-KLOC-Screenshot-output-command](/screenshots/lizard-kloc(21-06-2024_16-39-00).png)
2015-04-08 18:15:49 +02:00
## Coverage Measurement
2015-04-08 18:15:49 +02:00
- **Existing tool used to measure the coverage:** coverage.py
- **Coverage result:** 94%
2015-04-21 05:30:15 +02:00
![Coverage.py-Coverage-Measurement](/screenshots/coverage-py-2(2024-06-21_17-09-11).png)
![Coverage.py-Coverage-Measurement](/screenshots/coverage-py-1(21-06-2024_17-06-39).png)
## Tasks
2015-04-08 18:15:49 +02:00
### Luca De Nobili
### Function 1 (property): in thefuck/types.py
2018-05-09 19:35:46 -04:00
#### 1. Function Instrumentation
- **Before instrumentation:**
2015-04-08 18:15:49 +02:00
![Function1-BeforeInstrumentation](/screenshots/function_script_parts_before_instrumentation.png)
2015-04-08 18:15:49 +02:00
- **After instrumentation:**
2015-04-23 09:00:18 +12:00
![Function1-AfterInstrumentation](/screenshots/initial_branch_coverage_script_parts.png)
2015-04-08 18:15:49 +02:00
#### 2. Coverage Improvement
2015-05-01 00:13:08 +05:30
- **Coverage before adding new tests to the corresponding test file: /tests/test_types.py**
![Function1-CoverageBeforeImprov](/screenshots/initial_branch_coverage_script_parts.png)
2015-04-18 22:58:53 +02:00
- **Creating new tests to cover the function**
2015-07-27 23:23:26 +03:00
2015-07-20 21:08:46 +02:00
```python
def test_script_parts_exception(self, mocker, caplog):
mocker.patch('thefuck.shells.shell.split_command', side_effect=Exception('Mocked exception'))
command = Command('invalid command', 'output')
with caplog.at_level('DEBUG'):
parts = command.script_parts
assert parts == []
2015-08-19 11:00:09 +02:00
print(f"Branch coverage: {sum(branch_coverage.values())/len(branch_coverage) * 100}%\n")
2015-08-19 11:00:09 +02:00
```
- **Coverage after adding new tests to the corresponding test file: /tests/types.py**
![Function1-CoverageAfterImprov](/screenshots/final_branch_coverage_script_parts.png)
### Function 2: getch in system/unix.py
2019-10-08 17:47:04 -04:00
#### 1. Function Instrumentation
- **Before instrumentation:**
![Function2-BeforeInstrumentation](/screenshots/janis-function2-before_instrumentation.png)
- **After instrumentation:**
2015-05-08 00:16:50 +05:30
![Function2-AfterInstrumentation](/screenshots/janis-function2-after_instrumentation.png)
#### 2. Coverage Improvement
- **Coverage before adding new tests to the corresponding test file: /tests/rules/test_yarn_help.py**
![Function2-CoverageBeforeImprov](/screenshots/janis-function2-coverage_before_improvement.png)
- **Creating new tests to cover the function**
2015-04-29 04:47:15 +02:00
```python
def test_getch():
with patch('thefuck.system.sys.stdin', MagicMock()):
# Mock termios functions used in getch()
mock_tcgetattr = MagicMock()
mock_tcsetattr = MagicMock()
mock_tcgetattr.return_value = [0] * 6 # Mocking a typical return value for tcgetattr
with patch('thefuck.system.termios.tcgetattr', mock_tcgetattr):
with patch('thefuck.system.termios.tcsetattr', mock_tcsetattr):
# Mock fileno() to return a valid integer
sys.stdin.fileno = MagicMock(return_value=0)
# Mock setraw() to bypass actual terminal setup
tty.setraw = MagicMock()
2017-11-23 20:21:44 +01:00
# Mock read() to return values for getch() calls
sys.stdin.read = MagicMock(side_effect=['a', 'b', 'c', '', '\x1b', '\x03'])
2017-11-23 20:21:44 +01:00
# Test reading multiple characters
assert getch() == 'a'
assert getch() == 'b'
assert getch() == 'c'
# Test handling of empty input
assert getch() == ''
2017-08-26 13:31:09 +02:00
# Test handling of special characters
assert getch() == '\x1b'
assert getch() == '\x03'
2017-08-26 13:31:09 +02:00
# Ensure read(1) is called exactly once per getch() call
assert sys.stdin.read.call_count == 6 # 3 normal chars + 1 empty + 2 special chars
2017-08-26 14:39:36 +02:00
print(branch_coverage)
# print percentage of branch coverage
covered = 0
for key in branch_coverage:
if branch_coverage[key]:
covered += 1
print("Branch coverage: " + str(covered / len(branch_coverage) * 100) + "%")
2017-08-26 13:31:09 +02:00
```
- **Coverage after adding new tests to the corresponding test file: /tests/rules/test_yarn_help.py**
2017-08-26 13:31:09 +02:00
![Function2-CoverageAfterImprov](/screenshots/janis-function2-coverage_after_improvement.png)