'''
This file is used for testing find-pep505.py.

nc_* and Nc* are examples of null coalescing.
sn_* and Sn* are examples of save navigation.
'''

def nc_ifblock1(a=None):
    if a is None:
        a = 'foo'

def nc_ifblock2(a=None):
    if a is not None:
        pass
    else:
        a = 'foo'

class NcIfBlock3:
    def __init__(self, a=None):
        if a is None:
            self.b = {}
        else:
            self.b = a

class NcIfBlock4:
    def __init__(self, a=None):
        if a is not None:
            self.b = a
        else:
            self.b = {}

def nc_or1(a=None):
    return a or 'foo'

def nc_or2(a=None):
    return a or []

def nc_ternary1(a=None):
    return a if a is not None else 'foo'

def nc_ternary2(a=None):
    return 'foo' if a is None else a

def sn_and1(a=None):
    return a and a.foo

def sn_and2(a=None):
    return a and a['foo']

def sn_and3(a=None):
    return a and a.foo()

def sn_and3(a=None):
    return a and a.foo.bar

class SnIfBlock1:
    def __init__(self, a=None):
        if a is not None:
            a.foo()

class SnIfBlock2:
    def __init__(self, a=None):
        if a is None:
            pass
        else:
            a.foo()

class SnIfBlock3:
    def __init__(self, a=None):
        if a is None:
            b = 'foo'
        else:
            b = a.foo

class SnIfBlock4:
    def __init__(self, a=None):
        if a is None:
            b = 'foo'
        else:
            b = a['foo']

def sn_ternary1(a=None):
    return a.foo if a is not None else None

def sn_ternary2(a=None):
    return None if a is None else a.foo

def sn_ternary3(a=None):
    return a['foo'] if a is not None else None

def sn_ternary4(a=None):
    return None if a is None else a.foo()
