old_contents: import a1 #$ use=moduleImport("a1")
  
  x = a1.blah1 #$ use=moduleImport("a1").getMember("blah1")
  
  import a2 as m2 #$ use=moduleImport("a2")
  
  x2 = m2.blah2 #$ use=moduleImport("a2").getMember("blah2")
  
  import a3.b3 as m3 #$ use=moduleImport("a3").getMember("b3")
  
  x3 = m3.blah3 #$  use=moduleImport("a3").getMember("b3").getMember("blah3")
  
  from a4.b4 import c4 as m4 #$ use=moduleImport("a4").getMember("b4").getMember("c4")
  
  x4 = m4.blah4 #$ use=moduleImport("a4").getMember("b4").getMember("c4").getMember("blah4")
  
  import a.b.c.d #$ use=moduleImport("a")
  
  ab = a.b #$ use=moduleImport("a").getMember("b")
  
  abc = ab.c #$ use=moduleImport("a").getMember("b").getMember("c")
  
  abcd = abc.d #$ use=moduleImport("a").getMember("b").getMember("c").getMember("d")
  
  x5 = abcd.method() #$ use=moduleImport("a").getMember("b").getMember("c").getMember("d").getMember("method").getReturn()
  
  from a6 import m6 #$ use=moduleImport("a6").getMember("m6")
  
  x6 = m6().foo().bar() #$ use=moduleImport("a6").getMember("m6").getReturn().getMember("foo").getReturn().getMember("bar").getReturn()
  
  
  # Relative imports. These are ignored
  
  from .foo import bar
  
  from ..foobar import baz
  
  
  # Use of imports across scopes
  
  def use_m4():
      x = m4.blah4 #$ use=moduleImport("a4").getMember("b4").getMember("c4").getMember("blah4")
  
  def local_import_use():
      from foo import bar #$ use=moduleImport("foo").getMember("bar")
  
      x = bar() #$ use=moduleImport("foo").getMember("bar").getReturn()
  
  from eggs import ham as spam #$ use=moduleImport("eggs").getMember("ham")
  
  def bbb():
      f = spam #$ use=moduleImport("eggs").getMember("ham")
  
  from danger import SOURCE #$ use=moduleImport("danger").getMember("SOURCE")
  
  foo = SOURCE #$ use=moduleImport("danger").getMember("SOURCE")
  
  def change_foo():
      global foo
      foo = SOURCE #$ use=moduleImport("danger").getMember("SOURCE")
  
  def f():
      global foo
      sink(foo) #$ use=moduleImport("danger").getMember("SOURCE")
      foo = NONSOURCE
      change_foo()
      sink(foo) #$ MISSING: use=moduleImport("danger").getMember("SOURCE")
  
new_contents: import a1 #$ use=moduleImport("a1")
  
  x = a1.blah1 #$ use=moduleImport("a1").getMember("blah1")
  
  import a2 as m2 #$ use=moduleImport("a2")
  
  x2 = m2.blah2 #$ use=moduleImport("a2").getMember("blah2")
  
  import a3.b3 as m3 #$ use=moduleImport("a3").getMember("b3")
  
  x3 = m3.blah3 #$  use=moduleImport("a3").getMember("b3").getMember("blah3")
  
  from a4.b4 import c4 as m4 #$ use=moduleImport("a4").getMember("b4").getMember("c4")
  
  x4 = m4.blah4 #$ use=moduleImport("a4").getMember("b4").getMember("c4").getMember("blah4")
  
  import a.b.c.d #$ use=moduleImport("a")
  
  ab = a.b #$ use=moduleImport("a").getMember("b")
  
  abc = ab.c #$ use=moduleImport("a").getMember("b").getMember("c")
  
  abcd = abc.d #$ use=moduleImport("a").getMember("b").getMember("c").getMember("d")
  
  x5 = abcd.method() #$ use=moduleImport("a").getMember("b").getMember("c").getMember("d").getMember("method").getReturn()
  
  from a6 import m6 #$ use=moduleImport("a6").getMember("m6")
  
  x6 = m6().foo().bar() #$ use=moduleImport("a6").getMember("m6").getReturn().getMember("foo").getReturn().getMember("bar").getReturn()
  
  import foo.baz.baz as fbb #$ use=moduleImport("foo").getMember("baz").getMember("baz")
  from foo.bar.baz import quux as fbbq #$ use=moduleImport("foo").getMember("bar").getMember("baz").getMember("quux")
  from ham.bar.eggs import spam as hbes #$ use=moduleImport("ham").getMember("bar").getMember("eggs").getMember("spam")
  fbb.quux #$ use=moduleImport("foo").getMember("baz").getMember("baz").getMember("quux")
  fbbq #$ use=moduleImport("foo").getMember("bar").getMember("baz").getMember("quux")
  hbes #$ use=moduleImport("ham").getMember("bar").getMember("eggs").getMember("spam")
  
  import foo.bar.baz #$ use=moduleImport("foo")
  
  # Relative imports. These are ignored
  
  from .foo import bar
  
  from ..foobar import baz
  
  
  # Use of imports across scopes
  
  def use_m4():
      x = m4.blah4 #$ use=moduleImport("a4").getMember("b4").getMember("c4").getMember("blah4")
  
  def local_import_use():
      from foo import bar #$ use=moduleImport("foo").getMember("bar")
  
      x = bar() #$ use=moduleImport("foo").getMember("bar").getReturn()
  
  from eggs import ham as spam #$ use=moduleImport("eggs").getMember("ham")
  
  def bbb():
      f = spam #$ use=moduleImport("eggs").getMember("ham")
  
  from danger import SOURCE #$ use=moduleImport("danger").getMember("SOURCE")
  
  foo = SOURCE #$ use=moduleImport("danger").getMember("SOURCE")
  
  def change_foo():
      global foo
      foo = SOURCE #$ use=moduleImport("danger").getMember("SOURCE")
  
  def f():
      global foo
      sink(foo) #$ use=moduleImport("danger").getMember("SOURCE")
      foo = NONSOURCE
      change_foo()
      sink(foo) #$ MISSING: use=moduleImport("danger").getMember("SOURCE")
  
  # Star imports
  
  from unknown import * #$ use=moduleImport("unknown")
  
  hello() #$ MISSING: use=moduleImport("unknown").getMember("hello").getReturn()
  
subject: Add more test cases