Analyze the following test code and extract: 
1. All test functions and their names. 
2. Functions or methods invoked from the source code. 
3. Specific assertions or expected outcomes. 
Output includes: "test_functions", "test_branches"

Example Input: 
1. Source code:
def greet(name):
    if not name:
        raise ValueError("Name is required")
    return f"Hello, {name}"

def farewell():
    print("Goodbye!")

2. Test Code:
from source import greet
import unittest

# Unit test class
class TestGreetFunction(unittest.TestCase):

    # Test for valid name
    def test_greet_with_name(self):
        self.assertEqual(greet("Alice"), "Hello, Alice")

    # Test for empty name
    def test_greet_with_empty_name(self):
        with self.assertRaises(ValueError) as context:
            greet("")
        self.assertEqual(str(context.exception), "Name is required")

    # Test for None as name
    def test_greet_with_none_name(self):
        with self.assertRaises(ValueError) as context:
            greet(None)
        self.assertEqual(str(context.exception), "Name is required")

Example Output:
{
  "test_functions": [
    {
      "name": "test_greet",
      "tested_functions": ["greet"],
      "test_branches": [{
        "condition": "if not name",
        "cases": "empty", "none as name"
      },
      {
        "condition": "else",
        "cases": "valid name"
      }
      ]
    }
  ],
  
}

Input:
Source code:
{Sourcecode}

Test code:
{Testcode}

Output?



