// importing plugin globally
@plugin "plugin/plugin-global";

// transitively include plugins from importing another sheet
@import "./plugin/plugin-transitive";


// `test-global` function should be reachable
// `test-local`  function should not be reachable
// `test-shadow` function should return global version
.class {
  trans  : test-transitive();
  global : test-global();
  local  : test-local();
  shadow : test-shadow();

  // `test-global` function should propagate and be reachable
  // `test-local`  function should be reachable
  // `test-shadow` function should return local version, shadowing global version
  .local {
    @plugin (option) "./plugin/plugin-local";
    global : test-global();
    local  : test-local();
    shadow : test-shadow();
  }
}

// calling a mixin or detached ruleset should not bubble local plugins
// imported inside either into the parent scope.
.mixin() {
  @plugin "./plugin/plugin-local";
  mixin-local  : test-local();
  mixin-global : test-global();
  mixin-shadow : test-shadow();
}
@ruleset : {
  @plugin "./plugin/plugin-local";
  ruleset-local  : test-local();
  ruleset-global : test-global();
  ruleset-shadow : test-shadow();
};
#ns {
  @plugin (test=test) "./plugin/plugin-local";
  .mixin() {
    ns-mixin-global : test-global();
    ns-mixin-local  : test-local();
    ns-mixin-shadow : test-shadow();
  }
}
.class {
  #ns > .mixin();
  .mixin();
  @ruleset();
  class-local : test-local();
}


// `test-global` function should propagate into directive scope
@media screen {
  .test {
    result : test-global();
  }
}
@font-face {
  result : test-global();
}

// `test-global` function should propagate into nested directive scopes
@media screen and (min-width:100px) {
  @media (max-width:400px) {
		.test {
			result : test-global();
		}
	}
}

.test {
  @media screen {
    @plugin "./plugin/plugin-local";
    result : test-local();
  }
}

@plugin "./plugin/plugin-tree-nodes";
@ruleset2: test-detached-ruleset();
.root {
  @ruleset2();
}
.test-empty {
  val1: foo;
  test-collapse();
  val2: foo;
}
.test-simple {
  @plugin "./plugin/plugin-simple";
  value: pi-anon();
  value: (pi() * 2);
}
.test-conflicts {
  @plugin "./plugin/plugin-scope1";
  value: foo();
}
.test-conflicts {
  @plugin "./plugin/plugin-scope2";
  value: foo();
}
.test-conflicts {
  @plugin "./plugin/plugin-scope1";
  value: foo();
}
.test-collection {
  @plugin "./plugin/plugin-collection";
  @var: 32;
  store(@var);
  store(5);
  store("bird");
  list: list();
}

test-atrule("@charset"; '"utf-8"');
test-atrule("@arbitrary"; "value after ()");

// no minVersion specified
@plugin (option1) "./plugin/plugin-set-options";
@plugin "./plugin/plugin-set-options";
@plugin (option2) "./plugin/plugin-set-options";
@plugin "./plugin/plugin-set-options";
@plugin (option3) "./plugin/plugin-set-options";

// specifies minVersion: [2,0,0]
@plugin (option1) "./plugin/plugin-set-options-v2";
@plugin "./plugin/plugin-set-options-v2";
@plugin (option2) "./plugin/plugin-set-options-v2";
@plugin "./plugin/plugin-set-options-v2";
@plugin (option3) "./plugin/plugin-set-options-v2";

// specifies minVersion: [3,0,0]
@plugin (option1) "./plugin/plugin-set-options-v3";
@plugin "./plugin/plugin-set-options-v3";
@plugin (option2) "./plugin/plugin-set-options-v3";
@plugin "./plugin/plugin-set-options-v3";
@plugin (option3) "./plugin/plugin-set-options-v3";
