+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module test_examples is test
+
+import frontend
+import parse_examples
+import model_views
+
+class TestExample
+ test
+
+ # The path to the testunit being executed
+ #
+ # Used to retrieve the path to sources to compile.
+ var test_path: String = "NIT_TESTING_PATH".environ.dirname is lazy
+
+ # Test program to compile
+ #
+ # Default is `$NIT_DIR/tests/test_prog`.
+ var test_src: String = test_path / "../../../tests/test_prog" is lazy
+
+ fun test_model_examples is test do
+ var toolcontext = new ToolContext
+
+ # build model
+ var model = new Model
+ var modelbuilder = new ModelBuilder(model, toolcontext)
+ var mmodules = modelbuilder.parse_full([test_src])
+
+ # process
+ modelbuilder.run_phases
+ toolcontext.run_global_phases(mmodules)
+ var mainmodule = toolcontext.make_main_module(mmodules)
+
+ var filters = new ModelFilter(accept_example = true)
+
+ var view = new ModelView(model, mainmodule, filters)
+
+ for mentity in view.mentities do
+ if not mentity.is_example then continue
+
+ var mexample = mentity.mexample
+ if mexample == null then continue
+
+ print "{mentity.full_name} provides example for:"
+ for oentity, score in mexample.example_for do
+ print " * {oentity.full_name} ({score})"
+ end
+ end
+ end
+end