"""Test UCC counters for Java and Assembly.""" from pathlib import Path from pyucc.core.ucc_java_counter import UCCJavaCounter from pyucc.core.ucc_assembly_counter import UCCAssemblyCounter import tempfile def test_java_counter(): """Test Java counter on a sample file.""" java_code = ''' package com.example.test; import java.util.ArrayList; import java.util.HashMap; /** * This is a multi-line * comment block */ public class TestClass { private int count; // embedded comment private String name; public TestClass(int count, String name) { this.count = count; this.name = name; } public void execute() { for (int i = 0; i < count; i++) { System.out.println(name); } } } ''' with tempfile.NamedTemporaryFile(mode='w', suffix='.java', delete=False) as f: f.write(java_code) temp_path = Path(f.name) try: counter = UCCJavaCounter() results = counter.analyze_file(temp_path) print("=== Java Counter Test ===") print(f"Blank: {results['blank_lines']}") print(f"Comments (W/E): {results['comment_whole']}/{results['comment_embedded']}") print(f"Directives: {results['compiler_directives']}") print(f"Data: {results['data_declarations']}") print(f"Exec: {results['exec_instructions']}") print(f"Logical SLOC: {results['logical_sloc']}") print(f"Physical SLOC: {results['physical_sloc']}") # Assertions assert results['blank_lines'] > 0, "Should have blank lines" assert results['comment_whole'] > 0, "Should have whole comments" assert results['comment_embedded'] > 0, "Should have embedded comments" assert results['compiler_directives'] >= 2, "Should have import directives" assert results['data_declarations'] > 0, "Should have data declarations" assert results['exec_instructions'] > 0, "Should have exec instructions" assert results['logical_sloc'] > 0, "Should have logical SLOC" assert results['physical_sloc'] > 0, "Should have physical SLOC" print("✓ Java counter test PASSED\n") finally: temp_path.unlink() def test_assembly_counter(): """Test Assembly counter on a sample file.""" asm_code = ''' ; This is a comment .data myvar: .word 0 ; data declaration buffer: .space 100 .text .globl main main: # Another comment style li $t0, 5 ; load immediate move $a0, $t0 # move register jal print ; jump and link print: /* multi-line comment block */ syscall jr $ra ''' with tempfile.NamedTemporaryFile(mode='w', suffix='.asm', delete=False) as f: f.write(asm_code) temp_path = Path(f.name) try: counter = UCCAssemblyCounter() results = counter.analyze_file(temp_path) print("=== Assembly Counter Test ===") print(f"Blank: {results['blank_lines']}") print(f"Comments (W/E): {results['comment_whole']}/{results['comment_embedded']}") print(f"Directives: {results['compiler_directives']}") print(f"Data: {results['data_declarations']}") print(f"Exec: {results['exec_instructions']}") print(f"Logical SLOC: {results['logical_sloc']}") print(f"Physical SLOC: {results['physical_sloc']}") # Assertions assert results['blank_lines'] > 0, "Should have blank lines" assert results['comment_whole'] > 0, "Should have whole comments" assert results['comment_embedded'] > 0, "Should have embedded comments" assert results['data_declarations'] > 0, "Should have data declarations (in .data section)" assert results['exec_instructions'] > 0, "Should have exec instructions (in .text section)" assert results['logical_sloc'] > 0, "Should have logical SLOC" assert results['physical_sloc'] > 0, "Should have physical SLOC" print("✓ Assembly counter test PASSED\n") finally: temp_path.unlink() if __name__ == "__main__": test_java_counter() test_assembly_counter() print("✅ All tests passed!")